【发布时间】:2019-06-27 01:56:35
【问题描述】:
有没有办法在没有样板的情况下创建内部对象属性的访问器?
这是一个带有样板的类的示例
public class Foo {
internal let bar: Bar
internal init(bar: Bar) {
self.bar = bar
}
private struct Bar: Codable {
let id: Int
let name: String
}
// MARK: - Boilerplate
public var id: Int {
return self.bar.id
}
public var name: String {
return self.bar.name
}
}
// Usage
do {
let bar: Bar = try data.decoded()
let foo = Foo(bar: bar)
print(foo.id)
print(foo.name)
} catch {
...
}
有没有办法做到这一点而无需编写样板文件?对于具有更多属性的较大对象,这可能真的很有帮助
注意:访问控制修饰符很重要
【问题讨论】:
-
你怎么能在
Foo之外let bar : Bar = try data.decoded()?Bar不是Foo中的私有吗? -
你好@RickyMo 这是在同一个代码库中,在项目之外这是不可能的。这个问题是出于封装目的和单一责任
-
在 Swift 5.1 中,您可以进行“动态成员查找”,比较 stackoverflow.com/q/56771120/1187415
-
让我试试那个。
-
@MartinR 是的,我刚刚也独立地意识到了这一点,并在我的回答中添加了一个关于它的注释。好点。
标签: swift encapsulation abstraction