我见过很多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
}
答案 0 :(得分:4)
您的问题分为两部分:let
与var
,可选与非可选。
对于第一部分,将对象属性声明为let
只意味着您希望该属性在其整个生命周期中引用同一对象。在AppDelegate
中对单窗口应用程序有意义。
对于第二部分,UIWindow
从UIView
继承其初始值设定项; documentation for UIView
表示初始化程序可以返回nil
,尽管Swift版本未被声明为可用。
因此,如果你在其他环境中处理UIView
,那么将变量声明为可选,或者至少是解包,并且能够处理结果可能是有意义的。
也就是说,当你的程序启动时,如果UIWindow
无法初始化,立即崩溃可能是一件合理的事情,因为你真的无法做其他任何事情。 :)
我没有看到你如何做到这一点有任何问题,但我也愿意听到别人的意见。