如果我的应用有ScoreModel
,我需要传递给下一个UIViewController
。它可能不存在,因此不会传递给这个新的UIViewController
。如果是这种情况,我想让它创建一个新的模型实例。这不起作用(无限循环),但它会给出我想要创建的想法:
var scoreModel : ScoreModel! {
get {
if self.scoreModel == nil {
return ScoreModel()
} else {
return self.scoreModel
}
}
set {
self.scoreModel = newValue
}
}
如何检查当前版本的scoreModel == nil
是否没有进入循环?
答案 0 :(得分:2)
如果不是试图搞乱自定义getter / setter,你只需将scoreModel属性设置为可选(无论如何更好的约定),当你想将它传递给下一个视图控制器时,你会检查它是否为零。像这样:
var scoreModel: ScoreModel?
let nextViewController = UIViewController()
nextViewController.scoreModel = scoreModel ?? ScoreModel()
答案 1 :(得分:0)
其实你在谈论一个懒惰的初始化变量
lazy var scoreModel = ScoreModel()
第一次访问变量时会调用初始值设定项。
答案 2 :(得分:0)
你可以使用这样的懒惰变种:
class Test {
lazy var scoreModel: ScoreModel = {
return ScoreModel()
}()
}
let test = Test()
test.scoreModel = ScoreModel()