iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Mobile Development

麻瓜學習 iOS 開發系列 第 9

Day09:Swift 基礎語法— Optional

前言

當我們處理來自外部數據源的數據時,
可能會遇到空的數據的情況。
我們需要一種方法表達一種可以為空的狀態,
所以需要使用 optional。

Optional

  • 宣告一個變數 a 是 optional
// Implicitly Unwrapped OptionL
var a:Int! = nil
var a:Int!
// OptionL
var a:Int? = nil
var a:Int?

也可以分配給變數 a 值:

var a:Int! = 10
var a:Int? = 20

實作

  • 隱式解包
    打開 playground:

    Xcode 提示出現 error,
    要預防這種情況出現
    我們要在使用之前檢查變數 a 的值是否為 nil:

    使用隱式解包,
    Xcode 不會提示我們,
    也不需要再次解包。
    使用隱式解包要記住變數 a 是 optional,
    如果 code 很長,
    這就要取決於記憶力了,
    所以這個方法不太安全,
    所以也不太常用。
  • 解包
    宣告一個變數 c 是 optional:
var c:Int? = nil

在 playground 中打開:


Xcode 提示必須打開這個可選的變數 c 來得到值。
所以使用解包,
Xcode 會提示我們該變數可能含有 nil,
需要解包它來獲得值。

  • Optional Binding
    可選綁定是一種檢查可選變數是否為 nil 的安全檢查方式:


    這個可選綁定檢查了變數 c 不是 nil,
    並把變數 c 的值1分配給常數 y。
  • Optional Chaining
    可選鏈接處理 struct 和 class 的實例:

    可以發現使用 ! 強制打開這個 optional 會 crush,
    這裡使用 ? 就可以了:

上一篇
Day08:Swift 基礎語法—Loop
下一篇
Day10:Swift 基礎語法— Dictionary
系列文
麻瓜學習 iOS 開發30

尚未有邦友留言

立即登入留言