初始化后,属性不存在

时间:2017-02-07 07:32:03

标签: ios swift

我在视图控制器类中有这些属性:

@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之外,调试器中出现了每个变量,如下所示:

enter image description here

问题:

为什么它会丢失,不应该在调用viewDidLoad之前初始化类的所有属性?

2 个答案:

答案 0 :(得分:1)

计算属性不占用内存空间。因此没有理由让它们初始化。当您访问该属性时将对其进行计算。

答案 1 :(得分:0)

  

不应该在viewDidLoad之前初始化类的所有属性   被叫?

不,指的是Swift Documentation - Properties

计算属性:

  

实际上并不存储值。相反,他们提供了一个吸气剂   以及一个可选的setter来检索和设置其他属性和值   间接的。

意味着根据定义,默认情况下不能为计算属性设置值,因为它只是计算出来的! (它的值应该基于-let&quot; s-其他存储的属性值。)

一旦你访问(或&#34;重新加入&#34;)它,它应该进行计算。

希望这会有所帮助。