開発環境
swift --version swift-driver version: 1.62.15 Apple Swift version 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51) Target: x86_64-apple-macosx13.0
モチベーション
日々の開発でSwiftのIUO(Implicitly Unwrapped Optional)を知らなかった場面があって時間を費やしたことがあった。一度Swift Bookを通読して体系的にSwiftを理解していくぞ! 本記事では個人的に意識できていなかった項目を列挙する。
Swift Book
caseにwhereを使える
let hoge = "hoge" switch hoge { case let x where x.hasPrefix("ho"): print("\(hoge) has 'ho'") // hoge has 'ho' default: break }
Optionalはenumで実装されている
enum Speed<Wrapped: Numeric> { case sunny(Wrapped) case cloudy(Wrapped) case rainy(Wrapped) } var dogsSpeed: Speed<Int> = .sunny(50) var catsSpeed: Speed<Double> = .rainy(10.2)
if var
let a: Int? = Optional(1) if var a { a = 2 print(a) // 2 } print(a) // Optional(1)
Optional Bindingはguardやif letだけではなくif varもいける。
タプルの比較は全要素の比較ではない
(1, "z") < (2, "b") // true: 1, 2が比較されて決着が着く (1, "z") < (1, "b") // false: 1, 1では決着がつかないので後続が比較される
等しくない2つの値が見つかるまでは、2つの値が比較され続けられる。同値の時はスキップ。全部同値だったらfalse。(<
なので同値の時はfalseになる)
おわりに
Swift Book、結構な分量で時間がかかるが知識の漏れが明確になるので最後まで走り抜けるぞ!