大佬教程收集整理的这篇文章主要介绍了Swift的Optional的,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
该物业window
的UIApplicationDelegate
协议,声明如下:
optional var window: UIWindow? { get set }
这意味着它是一个 (在某种意义上,“ 实现UIApplicationDelegate
协议的类 ”,就像 @optional
在Objective-C中一样),并且该属性 Optional<UIWindow>
(或UIWindow?
) 。
这就是为什么最后要使用double可选类型的原因,因为该window
属性可能会或可能不会在realDelegate中实现,如果是,它将本身为Optional<UIWindow>
/
类型UIWindow?
。
因此,基本上,您想要的只是返回…的window
属性,realAppDelegate
除非realAppDelegate
该属性决定声明该属性本身(因为它不需要这样做optional
var
)。
realAppDelegate
未实现window
,那么您可能打算返回a nil
UIWindow?
。realAppDelegate
确实实现了该window
属性,则需要按原样返回它(此实现返回的是实际值UIWindow
还是nil
一个值)。最简单的方法是??
在Swift中使用nil-coalescing运算符。a ??b
意思是“如果a为非nil,则返回a,但如果a为nil,则返回b”(其中if a
是typeT?
,则整个表达式应返回type的对象T
,在您的情况下T
为type UIWindow?
)。
var window: UIWindow? {
get {
// If realAppDelegate.window (of type UIWindow??) is not implemented
// then return nil. Otherwise, return its value (of type UIWindow?)
return realAppDelegate.window ?? nil
// That code is equivalent (but more concise) to this kind of code:
// if let w = realAppDelegate.window { return w } else return nil
}
...
}
要实现安装程序,这是另一个问题。根据这个SO答案,似乎不可能直接访问协议的可选属性的设置器。但是您可以想象有一种破解方法,可以通过声明另一个使该window
属性要求成为强制性的协议,然后尝试在setter中对其进行强制转换来解决此问题:
@objc protocol UIApplicationDelegateWithWindow : UIApplicationDelegate {
var window: UIWindow? { get set }
}
class AppDelegateWrapper : UIApplicationDelegate {
...
var window: UIWindow? {
get {
return realAppDelegate.window ?? nil
}
set {
if let realAppDelWithWindow = realAppDelegate as? UIApplicationDelegateWithWindow
{
// Cast succeeded, so the 'window' property exists and is Now accessible
realAppDelWithWindow.window = newValue
}
}
}
...
}
对于我的项目,我必须创建一个代理AppDelegate,该代理将把调用转发到另一个AppDelegate。
UIApplicationDelegate有一个var window: UIWindow?
。我的问题是,为什么我不能这样做:
private lazy var realAppDelegate: UIApplicationDelegate = {
return AppDelegate()
}()
var window: UIWindow? {
get {
return realAppDelegate.window
}
set {
realAppDelegate.window = newValue
}
}
该代码的问题realAppDelegate.window
是UIWindow??
。
有人知道为什么吗?
以上是大佬教程为你收集整理的Swift的Optional的全部内容,希望文章能够帮你解决Swift的Optional的所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。