当我试图快速访问它时,弱财产给了我零

我有这些类:

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 =“”我得到:

意外地发现零,而解包一个可选的值

在Song类中初始化一次deinit函数

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

一旦没有其他强有力的价值,它就会变成零。 在您的代码中,您将新创build的“相册”值分配给它,而不要将其存储在其他任何地方。

所以你的弱财产只有专辑实例的参考,它将在赋值后立即成为零。

修复将取决于您使用/构build数据的方式。 如果“专辑”存储对其歌曲的引用,则应先创build并存储专辑对象,然后用它初始化其歌曲。 如果专辑没有提及其歌曲(这可能会很奇怪),那么你可以使专辑变强。

Interesting Posts