カルボナーラ街道

計測と観察

Swift Bookを読んだ(Basic Operatorsの終わりまで)

開発環境

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

docs.swift.org

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で実装されている

github.com

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、結構な分量で時間がかかるが知識の漏れが明確になるので最後まで走り抜けるぞ!