我学得很快,经常遇到以下问题。我将有一个带有属性的类,感觉它应该是一个let属性,因为它只会被设置一次。我还希望这个子对象维护对其所有者的引用,该所有者也应该是一个let属性,因为父关系不会改变。let当父类子类化另一个类并且所有属性都需要在运行之前设置super.init ()但需要引用selfinit 时,就会出现问题。
这是一个简单的例子
class NodeView: UIView {
let _nodePlugView: NodePlugView
init (node: Node) {
_nodePlugView = NodePlugView (parentView: self)
super.init ()
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我可以只用var这些_nodePlugView,但感觉不太合适。人们会推荐另一种模式吗?
您可以使用lazy变量。
lazy var _nodePlugView: NodePlugView = NodePlugView(parentView: self)
Run Code Online (Sandbox Code Playgroud)
惰性变量在对象本身初始化之后初始化。
如果您确实需要将其设置为 let 常量,则另一种方法可能是为 NodePlugView 提供一个不采用parentView 参数的初始化程序,并提供一个在初始化后设置parentView 的方法。
let _nodePlugView: NodePlugView
init (node: Node) {
_nodePlugView = NodePlugView()
super.init()
_nodePlugView.setParentView(self)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1724 次 |
| 最近记录: |