计算变量 return 如果存在则为自身,如果为零则为新实例
Computed variable return self if exists or new instance if nil
如果我的应用程序有 ScoreModel
,我需要将其传递给下一个 UIViewController
。它可能不存在,因此不会传递给这个新 UIViewController
。如果是这种情况,我想让它创建一个新的模型实例。这行不通(无限循环),但它会给出我正在尝试创建的内容的想法:
var scoreModel : ScoreModel! {
get {
if self.scoreModel == nil {
return ScoreModel()
} else {
return self.scoreModel
}
}
set {
self.scoreModel = newValue
}
}
如何在不进入循环的情况下检查 scoreModel == nil
的当前版本?
其实你说的是惰性初始化变量
lazy var scoreModel = ScoreModel()
第一次访问变量时调用初始化器。
您可以像这样使用惰性变量:
class Test {
lazy var scoreModel: ScoreModel = {
return ScoreModel()
}()
}
let test = Test()
test.scoreModel = ScoreModel()
如果您没有尝试乱用自定义 getters/setters,而是将您的 scoreModel 属性 设置为可选(无论如何更好的约定)并且当您想要将它传递给下一个视图控制器时会怎么样你检查它是否为零。像这样:
var scoreModel: ScoreModel?
let nextViewController = UIViewController()
nextViewController.scoreModel = scoreModel ?? ScoreModel()
如果我的应用程序有 ScoreModel
,我需要将其传递给下一个 UIViewController
。它可能不存在,因此不会传递给这个新 UIViewController
。如果是这种情况,我想让它创建一个新的模型实例。这行不通(无限循环),但它会给出我正在尝试创建的内容的想法:
var scoreModel : ScoreModel! {
get {
if self.scoreModel == nil {
return ScoreModel()
} else {
return self.scoreModel
}
}
set {
self.scoreModel = newValue
}
}
如何在不进入循环的情况下检查 scoreModel == nil
的当前版本?
其实你说的是惰性初始化变量
lazy var scoreModel = ScoreModel()
第一次访问变量时调用初始化器。
您可以像这样使用惰性变量:
class Test {
lazy var scoreModel: ScoreModel = {
return ScoreModel()
}()
}
let test = Test()
test.scoreModel = ScoreModel()
如果您没有尝试乱用自定义 getters/setters,而是将您的 scoreModel 属性 设置为可选(无论如何更好的约定)并且当您想要将它传递给下一个视图控制器时会怎么样你检查它是否为零。像这样:
var scoreModel: ScoreModel?
let nextViewController = UIViewController()
nextViewController.scoreModel = scoreModel ?? ScoreModel()