天天看點

iOS 開發 -- Swift 文法篇 (二) 可選項

  • Optional

     是 Swift 的一大特色,也是 Swift 初學者最容易困惑的問題
  • 定義變量時,如果指定是

    可選的

    ,表示該變量

    可以有一個指定類型的值,也可以是 nil

  • 定義變量時,在類型後面添加一個 

    ?

    ,表示該變量是可選的
  • 變量可選項的預設值是 

    nil

  • 常量可選項沒有預設值,主要用于在構造函數中給常量設定初始數值
// Optional 可能有兩個值 (None / Some)
// 格式(1. 自動推導):var 變量名: Optional = 值
let x: Optional = 
// 格式(2. 指定類型):var 變量
let y: Optional<Int> = 
// 格式(3. 簡化格式):var 變量名: 類型? = 值
let z: Int? = 

// 可選值在參與計算前,必須`解包 unwarping`
// 隻有`解包(unwrap)`後才能參與計算
// 在變量後添加一個 `!`,可以強行解包
// `?` 是用于定義的
// `!` 是用于解包的,程式員要對每一個 `!` 負責
print(x! + y! + z!)
           
  • 如果 Optional 值是 

    nil

    ,不允許參與計算
  • 隻有

    解包(unwrap)

    後才能參與計算
  • 在變量後添加一個 

    !

    ,可以強行解包
注意:必須要確定解包後的值不是 nil,否則會報錯
// 常量可選項必須要設定初始值
let x: Int? //= 20
x = 
// 變量可選項預設值是 nil
var y: Int? //= 10
y = 

// unexpectedly found nil while unwrapping an Optional value
// 在對可選項解包時發現 nil,會報錯!
if y == nil {
    print("y值為 nil")
} else {
    print(x! + y!)
}
           

常見錯誤

unexpectedly found nil while unwrapping an Optional value

翻譯

在對可選項[解包]時發現 nil

??

 運算符

  • ??

     運算符可以用于判斷 

    變量/常量

     的數值是否是 

    nil

    ,如果是則使用後面的值替代
  • 在使用 Swift 開發時,

    ??

     能夠簡化代碼的編寫
// 常量可選項必須要設定初始值
var x: Int? //= 20
// x = 30
// 變量可選項預設值是 nil
var y: Int? //= 10
y = 

print((x ?? ) + (y ?? ))
           
注意:

??

 的優先級低,在使用時,應該注意使用 

()

var str: String? = "老王"

// 注意 `??` 的優先級低,在使用時,應該注意使用 `()`
print((str ?? "無名") + " 你好")
print(str ?? "無名" + " 你好")