父/子参考:隐藏的setter,public getter

时间:2015-11-30 16:15:58

标签: ios swift swift2

我正在尝试模仿UIView s对我自己的对象的父/子行为。我有两个互相引用的对象ABA被视为B的父级。 AB分为两个不同的文件。

class A {
  private(set) var child: B?

  func setChild(child: B) {
    self.child = child
    child.parent = self
  }
}

class B {
  weak var parent: A? 
}

let a = A()
let b = B()
a.setChild(b)
b.parent // a
b.parent = nil // shouldn't be possible!

问题是:我不希望能够在parent的{​​{1}}方法之外修改B的{​​{1}}属性,因此只能这样做从setChild设置父/子关系。

AA属性具有相同的行为。 只要尚未将视图添加到超级视图,其UIView属性仍为superviewsuperview是只读的,无法修改。使用nil添加子视图会修改其superview

addSubview的访问控制修改为私有将允许只读行为,但不允许我从superview parent设置它。

这有意义吗?如何在Swift中实现? 非常感谢。

1 个答案:

答案 0 :(得分:1)

如果validates :content, presence: true A位于同一个文件中

B

类似UIView的结构:

class B {
    private(set) weak var parent: A? 
}


let a = A()
let b = B()
a.setChild(b)
b.parent // a
b.parent = nil // is impossible