開発環境
> 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 Book進めてる時に以下を試していた。
// コンパイルエラー let a: (Int, Int, Int) = (hoge: 1, aa: 2, ada:3) a.hoge // Value of tuple type '(Int, Int, Int)' has no member 'hoge'
コード
typealias Hoge = (Int, Int) typealias Fuga = (a: Int, b: Int) let h: Hoge = (1, 2) print(type(of: h) == Hoge.self) // true print(type(of: h) == Fuga.self) // false
Fuga
は Hoge
と各要素の型は同じだが、要素のlabelがあると別の型として判定される。
追記: 2022/11/28
(x: Int, y: Int)
のxやyはlabelと呼んだほうが正しそうなのでタイトル変更した。(名前 -> label)
typealias Fuga = (a: Int, b: Int) typealias Piyo = (a: Int, b: Int) let f: Fuga = (a: 1, b: 2) let p: Piyo = (a: 1, b: 2) print(type(of: f) == Piyo.self) // true
各型とlabel名が同じの場合は同じ型判定になる。