当我尝试快速访问它时,弱属性给我零



我有这些类:

class Song {
    var title : String = ""
    weak var album : Album?
    init() {
        self.album = Album()
    }
}

class Album {
    var title : String = ""
    var Songs : Array < Song > = []
    deinit {
        print(self , self.title)
    }
}

这应该可以正常工作,但是每当我尝试从歌曲实例设置专辑标题时,我都会收到专辑的零错误例如,如果执行下面的代码:

let s = Song()
s.title = "some title for song"
s.album!.title = "some title for album"

当试图 s.album!.标题 = " 我得到 :

解开可选值时意外发现 nil

deinit 函数在 Song 类中调用了一次 init

在这里做错了什么?我应该如何解决这个问题?

一旦没有其他引用它所持有的值,弱属性就会变为零。在代码中,将新创建的相册值分配给它,并且不将其存储在其他任何位置。

因此,您的弱属性包含对专辑实例的唯一引用,并且在分配后它将立即变为 nil。

修复将取决于您使用/构建数据的方式。如果专辑存储对其歌曲的引用,那么您应该首先在某个地方创建并存储专辑对象,然后使用它来初始化其歌曲。如果专辑没有引用其歌曲(这可能很奇怪),那么您可以使专辑变量变强。

相关内容

  • 没有找到相关文章

最新更新