类成员的访问控制。直接访问与显式Getter和Setter

时间:2016-03-10 08:06:58

标签: swift oop setter getter access-control

我们有很多博客,其中讨论了Swift和它的精彩之处。他们中的大多数听起来像一个完整的WWDC,并没有以令人筋疲力尽的方式和批判的观点讨论他们的主题。所以这个问题对于自由思考的思想,stackoverflow社区是明确的; - )

在Swift中,我们有像

这样的访问控制机制
public private(set) var foo: Foo?

private var _foo: Foo?
public var foo: Foo? {
  get {
    // make some preparing stuff, in another kind of way, as in the setter
    return _foo
    // make some completing stuff, in another kind of way, as in the setter
  }
  willSet {
    // make some preparing stuff
  }
  set {
    _foo = newValue
  }
  didSet {
    // make some completing stuff
  }

OOP中用于此目的的常用方法是

private var foo: Foo?
  public getFoo() -> Foo? {
    // make some preparing stuff, in the same kind of way, as in the setter
    return foo
    // make some completing stuff, in the same kind of way, as in the setter
  }
  private setFoo(foo: Foo) {
    // make some preparing stuff
    self.foo = foo
    // make some completing stuff
}

考虑到以下问题,您如何看待这些机制?

  1. 为什么willSetdidSet但没有willGetdidGet
  2. 没有比这些双重定义变量foo_foo更好的方法吗?
  3. public private(set)提供了良好的访问控制,但在声明类外部输入myInstance.foo =时,IDE Xcode会向变量显示建议。在分配新值之前,不会显示错误或警告。
  4. 分配新值后,Xcode会说setter is inaccessible。在OOP中,通常首先检查可见性。斯威夫特似乎不知道什么是可见性。显然,无法确定myInstance.foo是否将完成“读取命令”myInstance.foo.bar或“写入命令”。你怎么看待缺乏有用的代码完成?
  5. 有没有人针对使用明确的getter和setter进行性能检查?
  6. 使用计算变量是个好主意。事实上,它们只不过是方法/功能的结果。
  7. Apple及其社区密集地宣传这些技术的意义或令人敬畏。 a)使用传统的Getters和Setter是不是很糟糕? b)为什么Apple在常见的iOS UserInterface类(textField.text = "foo")中使用“他们的”方法,而不是WatchKit(textField.setText("foo"))的UserInterface中最年轻的类?这是前进的一步吗?
  8. 因此。这些是很多问题,但我认为,至少这些是相关的,以获得概述。我很期待你的方方面面。

0 个答案:

没有答案