2014-06-18 42 views
1

在下面的代碼中,爲什麼expectctingThisToBeOptional類型爲String而不是String類型!當getOptional()返回一個String!定義函數返回一個可選項,但它返回一個非可選項

func getOptional() -> String! 
{ 
    var s:String! = "Hello" 
    return s 
} 


if let expectingThisToBeOptional = self.getOptional() 
{ 
     // attempting to use expectingThisToBeOptional! gives error saying type is String not String! 
} 
else 
{ 
    // why does execution come here when run? 
} 

回答

1

if let語法解開可選;當可選項爲nil時,將執行else塊。

此外,使用!(而不是?)定義的可選項爲「隱含解包」。這意味着你不需要使用myvar!語法(力展開運營商)

更多的差異見this question的可選之間(例如,String?)和隱含展開可選的(例如,String!

+0

在問題代碼中,可選項不是零,那麼爲什麼else分支仍然在執行? – Gruntcakes

+0

@Sausages該問題顯示的代碼不可能是所有問題的代碼 - 例如,該函數是通過引用「self」來調用的。我懷疑他在實際使用中的功能(我認爲是一種方法)的代碼比我們看到的要多,並且有時會返回零。因爲從我們可以看到它永遠不會執行else塊。 – Jiaaro

0

當您使用if let語句時,您設置的常量包含可選參數的展開值(如果它具有值)。 self.getOptional()返回String!,其被解包爲String並且被分配給expectingThisToBeOptional

相關問題