var window: UIWindow?
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.whiteColor()
self.window!.makeKeyAndVisible()
在此代码中,我们初始化一个可选的UIWindow?
。为了给它赋值,我假设我会将值赋给self.window!
,因为那是可选值的所在。但正如您所看到的,我们需要使用self.window
。为什么会这样。为什么评论下的第一行看起来不像self.window! = UIWindow(frame: ....
答案 0 :(得分:3)
感叹号用于强制解包可选值。在您的代码中,window
尚未定义,并且尝试强制解包它会引发错误。
来自The Swift Programming Language Guide
尝试使用!访问不存在的可选值会触发运行时错误。在使用之前,请务必确保可选项包含非零值!强行解开它的价值。
答案 1 :(得分:0)
您可以为选项分配非可选项;这是使用非-nil
值初始化可选项的方法。
Optional<T>
实现为枚举,其中案例None
(通过分配nil
创建)和Some (T)
(通过分配类型{{1}的值创建) })。