我见过很多 UIWindow 被声明为 Optional 变量的例子,就像这样,
var 窗口: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/