2015-08-20 54 views
13

我是Swift的新手,試圖找出可選的概念。我在Playground中有一小段代碼,它給了我「在條件中的變量綁定需要初始化器」的錯誤。有人可以解釋爲什麼以及如何解決它?Swift Optionals - 條件中的變量綁定需要初始化器

根據「score1」是否有值,我只想打印「是」或「否」。下面是代碼:

import Cocoa 

class Person { 
    var score1: Int? = 9 

    func sum() { 
     if let score1 { 
      print("yes") 
     } else { 
      print("No") 
     } 
    }//end sum 
}// end person 

var objperson = person() 
objperson.sum() 

回答

10

if let語句接受一個可選變量。如果它爲零,則執行else塊或不執行任何操作。如果它有一個值,則將該值作爲非可選類型分配給不同的變量。

所以,下面的代碼將輸出的score1值或「否」,如果是沒有的:

if let score1Unwrapped = score1 
{ 
    print(score1Unwrapped) 

} 

else 
{ 
    print("No") 
} 

相同的較短的版本是:

print(score1 ?? "No") 

你的情況,在那裏你實際上沒有使用存儲在可選變量中的值,你也可以檢查該值是否爲零:

if score1 != nil { 
... 
} 
+0

謝謝洛倫茲沙夫 - 我基本上得出了同樣的結論。 – Harry

+1

不使用展開值時的其他選項是:if let _ = score1 {...} – mbehan

0

問題是if let假設你想創建一個常數score1一些價值。如果你只是要檢查它是否包含一個值,如不nil你應該只是做象下面這樣:

if score1! != nil { 
    // println("yes") 

所以你完整的代碼應該是這樣的:

class Person { 
    var score1: Int? = 9 

    func sum() { 
     if score1 != nil { 
      println("yes") 
     } 
     else { 
      println("no") 
     } 
    } 
} 

var objperson = Person() 
objperson.sum() 
+0

這不是我在Swift中使用diom來測試nil。以上答案的形式是「if let score1 = score {...」是要走的路。請注意,解包變量可以與包裝變量具有相同的名稱,並且這也已成爲Swift代碼中的常態。 –

3

寫作

if let score1 { 

沒有意義。如果你想看看分數有一個值,使用

if score1 != nil { 

if let score = score1 { 

最後一種情況結合新的非可選恆scorescore1。這使您可以在if語句中使用score

+0

謝謝Aderstedt! – Harry