我正在尝试模仿UIView
s对我自己的对象的父/子行为。我有两个互相引用的对象A
和B
。 A
被视为B
的父级。 A
和B
分为两个不同的文件。
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
设置父/子关系。
A
与A
属性具有相同的行为。
只要尚未将视图添加到超级视图,其UIView
属性仍为superview
。 superview
是只读的,无法修改。使用nil
添加子视图会修改其superview
。
将addSubview
的访问控制修改为私有将允许只读行为,但不允许我从superview
parent
设置它。
这有意义吗?如何在Swift中实现? 非常感谢。
答案 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