2015-08-19 18 views
0

我從一個非控制器類展示控制器,所以我抓住了根視圖,並得到了「未解包」的常見錯誤,因此我放入了?和!的嘗試或強行解開,仍然說窗口沒有解開,所以它通過插入另一個來自動修復它。爲什麼在可選類型中需要兩個感嘆號未被解開?

UIApplication.sharedApplication().delegate?.window!!.rootViewController!.presentViewController(blah blah blah... {() -> Void in 
     }); 

標題說明了一切。我唯一的猜測是窗口基本上是一個計算的屬性,給出了一個可選的,你必須解開它?!? (語法不是錯字,只是確保我沒有錯誤地結束句子)

+0

似乎??首先檢查協議是否被實現,如果是,則展開該變量。 http://stackoverflow.com/questions/29920427/swift-optional-of-optional我還沒有弄清楚,如果這應該是一個答案,評論,或愚蠢,但措辭和原因是不一樣的。 –

回答

1

您需要兩個!,因爲該類型是嵌套可選(UIWindow??)。

像這樣:

let nested: Int?? = 3 

// the safe way 
if let innerValue = nested { 
    // innerValue is of type Int? 
    if let unwrapped = innerValue { 
     // unwrapped is of type Int 
    } 
} 
+0

我不認爲它是一個var內的嵌套var,我找不到原因。例如:如果外部存在但內部不存在會怎麼樣。但我確實發現了一些解釋如何?沒有意義,看起來是一個協議 –

+0

@StephenJ我不知道使用「double optional」的原因,但是'Int ??'是TYPE'Optional >'的簡寫。 – Qbyte