Swiftのタプルは各要素の型が同じでもlabelがあると別の型になる

開発環境

> 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

モチベーション

docs.swift.org

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

FugaHoge と各要素の型は同じだが、要素の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名が同じの場合は同じ型判定になる。