我已经看到许多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
}
最佳答案
您的问题分为两部分:let
与var
,以及可选与非可选。
对于第一部分,将对象属性声明为let
只是意味着您希望该属性在其整个生命周期中都引用相同的对象。对于单窗口应用程序,在AppDelegate
中有意义。
对于第二部分,UIWindow
从UIView
继承其初始化程序; documentation for UIView
表示初始化器可以返回nil
,尽管未将Swift版本声明为可失败的。
因此,如果您在其他上下文中处理UIView
,则可以将变量声明为可选变量,或者至少将其声明为未包装变量,并能够处理结果。
就是说,在您的程序启动时,如果UIWindow
无法初始化,则立即崩溃可能是一件合理的事情,因为您实际上将无能为力。 :)
我认为您的操作方式没有任何问题,但是我也很乐意听取其他人的意见。
关于ios - 将UIWindow声明为let而不是可选的var可以很好地进行编译。有什么陷阱吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27362953/