Swift Force == | | 正常使用 | 留一手 optional | Compiler你讓開一下 | | ---------------- | -------- | -------------- | ---------------- | | **Declaration** | `var a: T` | `var a: T?` | `var a: T!` | | What | 定義 a 為 T| 定義 a 為 Optional\<T\> | 定義 a 為 Implicit Optional\<T\>。用起來一般值沒兩樣,空了用到就炸。 | | Why | 一般變數 | 值可能無效的情境 | 初始值可能只是要慢一點才有。通常用在 UI View 的 IBOutlet | | **ARC reference** | `var a: T` | `weak var a: T?` | `unowned var a: T` | | What | count +1 | count 不加,用 optional包 | count 不加,也沒用 optional 包。空了就炸。| | Why | 一般由ARC管理的變數。 | 解決循環相依 | 解決循環相依,且某一方生命週期一定比另一方長 | | **Exception catch** | `try foo()` | `try? foo()` | `try! foo()` | | What | 要用 do{}catch{} 包,正常處理。 | 不用 catch。exception 有無,用 optional 回傳。 | 不用 catch。有 exception 就炸,回傳不用 optional 包。| | Why | 很乖地處理 exception | 不 care exception 的 error。| 懶得處理 exception。 | | **Cast** | `val as T` | `val as? T` | `val as! T` | | What | 正常上轉,一定成功 | 試著下轉,結果用 optional 包 | 試著下轉,失敗就炸。結果不用 optional 包。| | **Member access** | `a.mem` | `a?.mem` | `a!.mem` | | What | 正常不是 optional 的正常 access | 將 access 鏈結果包成 optional 回傳 | 空了就炸 |
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up