我已经看到许多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
     }

最佳答案

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

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

对于第二部分,UIWindowUIView继承其初始化程序; documentation for UIView 表示初始化器可以返回nil,尽管未将Swift版本声明为可失败的。

因此,如果您在其他上下文中处理UIView,则可以将变量声明为可选变量,或者至少将其声明为未包装变量,并能够处理结果。

就是说,在您的程序启动时,如果UIWindow无法初始化,则立即崩溃可能是一件合理的事情,因为您实际上将无能为力。 :)

我认为您的操作方式没有任何问题,但是我也很乐意听取其他人的意见。

关于ios - 将UIWindow声明为let而不是可选的var可以很好地进行编译。有什么陷阱吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27362953/

10-11 17:23