📖

【Swift】structの標準プロトコルについて

2024/10/15に公開

Swiftのclass、structが準拠できる標準プロトコルについてまとめました。

1.Identifiable

一意の識別子(id)を持つオブジェクトを扱う際に使用します。
idプロパティは必須です。
SwiftUIのListやForEachなどで便利です。

struct User: Identifiable {
    var id: Int
    var name: String
}

2.Hashable

オブジェクトをハッシュ化するために使用されます。
これにより、SetやDictionaryのようなコレクションのキーとして使えるようになります。

struct User: Hashable {
    var id: Int
    var name: String
}

let user1 = User(id: 1, name: "Alice")
let user2 = User(id: 2, name: "Bob")
let user3 = User(id: 3, name: "Charlie")

// Setに追加(重複したidは追加されない)
var userSet: Set<User> = [user1, user2]
userSet.insert(user3)
userSet.insert(user1) // user1はすでに存在するので無視される

// Dictionaryでキーとして使用
var userDictionary: [User: String] = [user1: "Admin", user2: "User"]
print(userDictionary[user1]!) // 出力: "Admin"

3.Decodable

外部データ(例えば、JSON)Swiftのオブジェクトに変換するためのプロトコルです。
APIから受け取ったデータを簡単に変換できます。

struct User: Decodable {
    var name: String
    var age: Int
}

let jsonData = """
{
    "name": "John",
    "age": 30
}
""".data(using: .utf8)!

do {
    let user = try JSONDecoder().decode(User.self, from: jsonData)
    print(user.name)  // "John"
} catch {
    print(error)
}

Discussion