Moh*_*ijf 2 weak ios automatic-ref-counting swift
我有这些课程:
class Song {
var title : String = ""
weak var album : Album?
init() {
self.album = Album()
}
}
Run Code Online (Sandbox Code Playgroud)
和
class Album {
var title : String = ""
var Songs : Array < Song > = []
deinit {
print(self , self.title)
}
}
Run Code Online (Sandbox Code Playgroud)
这应该可以正常工作,但是每当我尝试从歌曲实例设置专辑的标题时,我都会收到专辑的 nil 错误,例如,如果执行以下代码:
let s = Song()
s.title = "some title for song"
s.album!.title = "some title for album"
Run Code Online (Sandbox Code Playgroud)
当尝试 s.album!.title = "" 我得到:
在解开 Optional 值时意外发现 nil
在 Song 类中调用 init 一次的 deinit 函数
我在这里做错了什么?我应该如何解决这个问题?
一旦没有其他强引用它所拥有的值,弱属性就会变为 nil 。在您的代码中,您将新创建的专辑值分配给它,并且不要将其存储在其他任何地方。
因此,您的弱属性持有对专辑实例的唯一引用,并且在分配后它将立即变为 nil。
修复方法取决于您使用/构建数据的方式。如果 Album 存储对其歌曲的引用,那么您应该首先在某处创建和存储专辑对象,然后使用它来初始化其歌曲。如果 Album 没有对其歌曲的引用(这可能很奇怪),那么您可以使专辑变量变强。
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |