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 回答
0

你应该试试Sourcery 。我有同样的问题,我遇到了这个工具,如果你快速搜索,你应该很容易找到一些已经为 Sourcery 制作的模板,这些模板可以让你为你的数据类型生成镜头。

于 2019-05-14T18:50:04.543 回答