ios – 为什么double类型的主窗口可选? - 代码日志

ios – 为什么double类型的主窗口可选?

当访问UIapplication的主窗口时,它返回为UIWindow?

let view = UIApplication.sharedApplication().delegate?.window // view:UIWindow??

为什么它作为一个双重可选的返回,它是什么意思,如果放入一个如果我应该添加一个!之后呢

if let view = UIApplication.sharedApplication().delegate?.window!

我的第一个虽然是替换?用一个!在委托之后,但不是解决方案。

@matt有细节,但有一个(有点可怕,有点可怕)的解决方法。 (参见下面的编辑)

let window = app.delegate?.window??.`self`()

我将把这行代码的理解作为读者的练习。

好的,我说谎,让我们分手吧。

app.delegate?.window

好的,到目前为止这么好。在这一点上我们有UIWindow?这让我们头痛(我相信Swift和Cocoa之间的Swift断开的错误)。我们想折叠两次。我们可以用可选的链接(?)来做到这一点,但是它可以解开和重新包装,所以我们回到我们开始的地方。尽管如此,您可以双重选择链。这是奇怪的,但工作。

那太好了,但是不是合法的后缀运算符。你必须实际链接到某物。那么,我们想链接自己(即“身份”)。 NSObject协议给我们一个身份方法:self。

self是NSObject的一种方法,但它也是Swift中的保留字,因此它的语法为“self”()

所以我们得到了上面的疯狂。按照你的要求做

注意,因为??工作,你在技术上不需要这个。你可以接受那个视图是UIWindow?并使用??在它像视图框架。这是一个有点嘈杂,但可能不会为几个地方应该需要任何真正的问题。

(*)我以前认为这是Swift中的一个错误,但它不能直接由可选链接修复。问题是没有可选的链接过去窗口。所以我不知道在哪里找到正确的地方。 Swift可以允许postfix?意思是“扁平化”,而不需要链接,但是感觉很奇怪。我猜正确的操作符是interrobang委托?.window‽:D我确信不会造成任何混乱。

编辑:

Joseph Lord pointed out the better solution(这与我一直在使用的技术非常相似,以避免琐碎的if-let,但以前没有想过):

let window = app.delegate?.window ?? nil // UIWindow?

我同意他的看法,这是正确的答案。

http://stackoverflow.com/questions/28901893/why-is-main-window-of-type-double-optional

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ios – 为什么double类型的主窗口可选?