2016-11-09 67 views
-4

代碼的結果是:
NUM1是可選的(5)
NUM2是可選的(5)
NUM2是5
我想知道爲什麼,如果{} NUM2是一個可選值,但打印 「NUM2 5」在迅速累積打印可選值,當非可選

var optionalNum : Int? = 5 
let num1 = optionalNum 
print("num1 is \(num1)") 

if let num2 = optionalNum { 
    print("num2 is \(optionalNum)") 
    print("num2 is \(num2)") 
} else { 
    print("optionalNum does not hold a value") 

} 
+2

的原因,因爲在這一行'如果讓NUM2 = {optionalNum'你剛纔_unwrapped_'optionalNum'成'num2',這是不是一個可選的了。 – holex

+1

我強烈建議閱讀[Swift編程語言指南的Optionals部分](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/ uid/TP40014097-CH5-ID330)(特別是可選綁定) – Hamish

+0

還有一個關於此主題的出色SO文檔頁面,http://stackoverflow.com/documentation/swift/475/conditionals/1560/optional-binding-and- where-clause#t = 201611091355361786641 – milo526

回答

1

當你寫

if let num2 = optionalNum { ... 

您正在執行可選綁定

在普通的英語它意味着

如果optionalNum包含一個值,然後

  1. 創建一個新的常數num2包含該值
  2. 並執行{ ... }
  3. 內的塊與在塊內提供新的num2常量

因此在塊num2內不是可選的。所以當你打印它時,你會得到明顯的價值。這就是爲什麼它打印

num2 is 5 
+3

官方條款是「可選綁定」。 –

+0

@MartinR:固定,謝謝! –