8

Swift のクラスのプロパティの getter/setter 関数ペアを自動的に生成する方法はありますか? Haskell のレンズのようなものです。

私は次のことを手動で行うことができました:

class PropertyLens<U, T> {
    let getter: U -> T
    let setter: (U, T) -> ()

    init(getter: (U -> T), setter: ((U, T) -> ())) {
        self.getter = getter
        self.setter = setter
    }

    func get(u: U) -> T {
        return getter(u)
    }

    func set(u: U, t: T) {
        setter(u, t)
    }
}
// ...
let myPropertyLens = PropertyLens<MyClass, Int>(getter: { $0.myProperty }, setter: { $0.myProperty = $1 })

しかし、それは私が望むよりも冗長で退屈で、エラーが発生しやすくなります。不足している組み込み機能はありますか?

4

2 に答える 2

0

答え自体については、これまでのところ (1.1) 言語構造は、あなたがしていること (格納されたプロパティのアクセスプロセスを参照可能なオブジェクトにラップすること) に取って代わるものはありません。

答えの意見の部分については、コードはパブリック変数でのみ機能するように見えますが、これは基本的なカプセル化ルールを破るために厄介です。それは正しいですか?

于 2014-12-04T18:35:40.150 に答える