MENU

目次

SwiftのKeyPath

SwiftのKeyPathは、型のプロパティへのアクセスを表現するための型安全な方法です。これには、KeyPath, WritableKeyPath, ReferenceWritableKeyPathの3種類があります。それぞれについて、サンプルコードを用いて説明します。

KeyPath型

KeyPath型は、読み取り専用のプロパティへのアクセスを表します。KeyPathは値型(構造体や列挙型)のプロパティにも参照型(クラス)のプロパティにも使用できます。

struct Person {
    let name: String
    let age: Int
}

let name = person[keyPath: \Person.name]  // "Alice"
print(name)

WritableKeyPath型

WritableKeyPath型は、値型のプロパティへの読み取りおよび書き込みアクセスを表します。この場合、Personは構造体であり、値型です。

struct Person {
    var name: String
    var age: Int
}

var person = Person(name: "Alice", age: 30)

// 読み取り
let age = person[keyPath: \Person.age]  // 30
print(age)

// 書き込み
person[keyPath: ageKeyPath] = 31
print(person.age)  // 31

ReferenceWritableKeyPath型

ReferenceWritableKeyPath型は、参照型(クラス)のプロパティへの読み取りおよび書き込みアクセスを表します。この場合、Personはクラスであり、参照型です。

class Person {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let person = Person(name: "Alice", age: 30)

// 読み取り
let name = person[keyPath: \Person.name]  // "Alice"
print(name)

// 書き込み
person[keyPath: \Person.name] = "Bob"
print(person.name)  // "Bob"

まとめ

  • KeyPathは読み取り専用のプロパティへのアクセスを表します。
  • WritableKeyPathは値型のプロパティへの読み取りおよび書き込みアクセスを表します。
  • ReferenceWritableKeyPathは参照型のプロパティへの読み取りおよび書き込みアクセスを表します。

これらの型を使うことで、プロパティへのアクセスを型安全に操作することができ、コードの再利用性や可読性が向上します。

年収4桁万円を達成中のiOSエンジニアが皆さんをお導きいたします!
ぜひメンターを受けてみてください〜
メンターはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Rio@iOSエンジニアのアバター Rio@iOSエンジニア 経営者兼モバイルアプリエンジニア

都内のモバイルアプリ開発会社経営者。
モバイルアプリの新規の請負開発及び保守運用を引き受ける。
Denso→Honda→現在
#RxSwift #MVVM #Firebase #Python3

コメント

コメントする

目次