weak 属性 当我试图访问它时给了我 nil swift
weak property gives me nil when i'm trying to access it swift
我有这些 classes :
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!.title = "" 我得到:
unexpectedly found nil while unwrapping an Optional value
在 Song class 中的 init 上调用了一次 deinit 函数
我在这里做错了什么?我该如何解决?
Weak 属性 一旦没有其他 strong 引用它所持有的值,就会变为 nil。在您的代码中,您将新创建的相册值分配给它并且不将其存储在其他任何地方。
所以你弱 属性 持有对相册实例的唯一引用,它会在分配后立即变为 nil。
修复将取决于您 use/construct 数据的方式。如果 Album 存储对其歌曲的引用,那么您应该首先在某处创建和存储专辑对象,然后使用它来初始化其歌曲。
如果 Album 没有对其歌曲的引用(这可能很奇怪),那么您可以将 album 变量设置为 strong。
我有这些 classes :
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!.title = "" 我得到:
unexpectedly found nil while unwrapping an Optional value
在 Song class 中的 init 上调用了一次 deinit 函数
我在这里做错了什么?我该如何解决?
Weak 属性 一旦没有其他 strong 引用它所持有的值,就会变为 nil。在您的代码中,您将新创建的相册值分配给它并且不将其存储在其他任何地方。
所以你弱 属性 持有对相册实例的唯一引用,它会在分配后立即变为 nil。
修复将取决于您 use/construct 数据的方式。如果 Album 存储对其歌曲的引用,那么您应该首先在某处创建和存储专辑对象,然后使用它来初始化其歌曲。 如果 Album 没有对其歌曲的引用(这可能很奇怪),那么您可以将 album 变量设置为 strong。