在Swift实例成员声明中引用`self`

我有一个结构设置,接受一个引用作为单个初始化参数:

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必须先完全初始化才能使用.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...