我在视图控制器类中有这些属性:
@IBOutlet weak var flashCardView: FlashCard!
var originPoint: CGPoint!
var xFromCenter: Float = 0
var yFromCenter: Float = 0
let actionMargin: Double = 240
let rotationMax: Float = 1
let rotationStrength: Float = 320
let rotationAngle: Float = 3.14/8
var memories: [Memory] {
if let loadedMemory = self.loadMemory() {
return loadedMemory.sorted(by: {$0.strength < $1.strength})
} else {
let sampleMemory = Memory(masteryLevel: 1, algorithm: Algorithm.algorithm1.chooseAlgorithm(), forgetRatio: 0, lastStudyTime: Date(), front: #imageLiteral(resourceName: "Ideas-Blue"), back: #imageLiteral(resourceName: "Ideas-Yellow"))
return [sampleMemory]
}
}
var unfamiliarity: Int = 0
我在viewDidLoad
中设置了一个断点来检查它们的值,但有趣的是,除了计算属性 - memories
之外,调试器中出现了每个变量,如下所示:
问题:
为什么它会丢失,不应该在调用viewDidLoad
之前初始化类的所有属性?
答案 0 :(得分:1)
计算属性不占用内存空间。因此没有理由让它们初始化。当您访问该属性时将对其进行计算。
答案 1 :(得分:0)
不应该在viewDidLoad之前初始化类的所有属性 被叫?
不,指的是Swift Documentation - Properties:
计算属性:
实际上并不存储值。相反,他们提供了一个吸气剂 以及一个可选的setter来检索和设置其他属性和值 间接的。
意味着根据定义,默认情况下不能为计算属性设置值,因为它只是计算出来的! (它的值应该基于-let&quot; s-其他存储的属性值。)
一旦你访问(或&#34;重新加入&#34;)它,它应该进行计算。
希望这会有所帮助。