internal struct NodeState: Equatable { weak var node: Node! = nil // ... init(node: Node) { self.node = node }}
我想将NodeState实例化为Node类的成员,传递self in来设置弱引用:
public class Node: NSObject { internal var state = NodeState(node: self) // ...}
…但是我得到了这个奇怪的编译错误:
Cannot convert value of type ‘NSObject -> () -> Node’ to expected argument type ‘Node’
我不允许在Swift的成员声明中引用self吗?
解决方法 通常,您不能在成员类声明中引用self,但是如果您使属性变为惰性并使用闭包初始化它,则可以.将Node类更改为此类应该可以正常工作:public class Node: NSObject { internal lazy var staticState: NodeState = { NodeState(node: self) }()}
它起作用,因为懒惰属性直到self初始化后才初始化. self必须先完全初始化才能使用.
总结以上是内存溢出为你收集整理的在Swift实例成员声明中引用`self`全部内容,希望文章能够帮你解决在Swift实例成员声明中引用`self`所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)