2014-08-28 46 views
1
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: ....爲什麼我們在爲swift中的可選項賦值時忽略感嘆號?

回答

3

感嘆號用於強制展開可選值。在您的代碼中,window尚未定義,嘗試強制展開它將引發錯誤。

The Swift Programming Language Guide

嘗試使用!訪問不存在的可選值會觸發運行時錯誤。在使用之前,務必確保可選項包含非零值!強迫 - 解開其價值。

+2

此外,所涉及的語句是一個賦值語句,所以self.window的當前值是不重要的 - 在語句執行後它將被賦值。 – Paulw11 2014-08-28 03:28:26

0

您可以將一個非可選項指定給一個可選項;這是初始化具有非-nil值的可選項的方法。

Optional<T>被實現爲與箱子None枚舉(通過分配nil創建的),和Some (T)(通過分配T類型的值創建)。

相關問題