在Swift中按类别隐藏属性设置器

时间:2019-06-06 22:10:24

标签: swift

我想在我的Swift模型对象上隐藏一些属性设置器和初始化器。这些是服务器提供的参考数据,在任何情况下都不应由应用程序创建或修改它们。在Swift中这很简单。

但是,我的项目中有一个应用程序(一个单独的目标)需要打破此规则。这是我用来批量填充数据的工具,因此当然需要能够初始化新的模型对象并设置其属性。

要实现这一目标,我有哪些选择?我宁愿不使用全新的项目,因为这将意味着大量的代码重复。是否有某种语言级别的方法可以使这种可变性在一个应用程序中隐藏,但对另一应用程序可用?

1 个答案:

答案 0 :(得分:0)

如果使用let关键字声明属性。然后只能在类型的init中进行设置。

您还可以声明一个私有的setter,以使该类型的调用者将该属性设置为只读,但可以在该类型的内部进行读/写

struct Foo {
  private(set) var bar: Bool = true

  func toggle() {
    bar.toggle()
  }
}

var foo = Foo()

let barState = foo.bar // This works
foo.toggle() // This works too
foo.bar.toggle() // This will make a compile time error