将UIWindow声明为let而不是可选的var编译好。任何陷阱?

时间:2014-12-08 16:58:41

标签: ios swift uiwindow

我见过很多UIWindow声明为Optional变量的例子,如此,

var window: UIWindow?

我的应用只有一个窗口,在整个生命周期内都会保持不变。我认为将它声明为常数更有意义。 所以我做到了。它不会引发任何编译器错误(从iOS 8.2开始)并且似乎工作正常。

为什么没有其他人这样做?这样做有什么陷阱吗?

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    let window: UIWindow = UIWindow(frame: UIScreen.mainScreen().bounds)

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        let viewController = ViewController()

        window.rootViewController = viewController
        window.makeKeyAndVisible()

        return true
     }

1 个答案:

答案 0 :(得分:4)

您的问题分为两部分:letvar,可选与非可选。

对于第一部分,将对象属性声明为let只意味着您希望该属性在其整个生命周期中引用同一对象。在AppDelegate中对单窗口应用程序有意义。

对于第二部分,UIWindowUIView继承其初始值设定项; documentation for UIView表示初始化程序可以返回nil,尽管Swift版本未被声明为可用。

因此,如果你在其他环境中处理UIView,那么将变量声明为可选,或者至少是解包,并且能够处理结果可能是有意义的。

也就是说,当你的程序启动时,如果UIWindow无法初始化,立即崩溃可能是一件合理的事情,因为你真的无法做其他任何事情。 :)

我没有看到你如何做到这一点有任何问题,但我也愿意听到别人的意见。