为什么在为swift中的可选项赋值时忽略了感叹号?

时间:2014-08-28 01:32:28

标签: ios swift

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: ....

2 个答案:

答案 0 :(得分:3)

感叹号用于强制解包可选值。在您的代码中,window尚未定义,并且尝试强制解包它会引发错误。

来自The Swift Programming Language Guide

  

尝试使用!访问不存在的可选值会触发运行时错误。在使用之前,请务必确保可选项包含非零值!强行解开它的价值。

答案 1 :(得分:0)

您可以为选项分配非可选项;这是使用非-nil值初始化可选项的方法。

Optional<T>实现为枚举,其中案例None(通过分配nil创建)和Some (T)(通过分配类型{{1}的值创建) })。