2016-04-23 213 views
1
var firstName: String = "John Appleseed" 
if let name = firstName { 
    print ("Hello, \(name)") 
} 

字符串錯誤出現在第二行:初始化器有條件的結合必須有可選的類型,而不是「字符串」錯誤:初始值設定條件的結合必須有可選的類型,而不是「字符串」

如何決定是否使用可選或非可選變量?

+2

錯誤說明了這一切...你不能使用可選綁定('如果讓...')與非可選。請將'String'更改爲'String?',或完全取消可選綁定(取決於這是僅用於演示代碼還是實際代碼) – Hamish

回答

3

首先,讓我們考慮if let結構的意思。當你寫

if let name = firstName { 
    print ("Hello, \(name)") 
} 

你告訴斯威夫特要

  1. 嘗試展開firstName
  2. 如果解纏的結果是成功的,分配展開到name
  3. 如果結果的結果的解包成功,打印"Hello, \(name)"

換句話說,這個構造用於處理可選變量的解包。然而,變量firstName而不是可選;沒有任何東西可以解開,導致Swift抱怨。

2
var firstName: String? = "John Appleseed" 
if let name = firstName { 
print ("Hello, \(name)") 
} 

add ?使其成爲可選項。

檢查answer in this link知道在哪裏使用可選的,什麼是它實際上是

希望這將有助於:)

+4

請注意,如果這是實際的生產代碼,因此,如果您在定義它時知道'firstName'的值,並且您知道它始終有一個值,那麼它肯定應該是非可選的。 – Hamish

相關問題