2017-02-07 3 views
0

У меня есть эти свойства, на мой взгляд класса контроллера:недвижимости не существует после инициализации

@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?

ответ

0

не все свойства класса инициализируются перед представлениемDidLoad вызывается?

Нет, ссылаясь на Swift Documentation - Properties:

, вычисленных свойства:

, которые на самом деле не хранить значение. Вместо этого они предоставляют геттер и дополнительный установщик для извлечения и установки других свойств и значений косвенно.

Означает, что по определению вы не можете установить значение для вычисленного свойства по умолчанию, потому что просто его вычислили! (его значение должно основываться на значениях s-s-s сохраненных свойств).

Как только вы получаете доступ (или «повторно присоединяетесь»), он должен выполнить вычисление.

Надеюсь, это помогло.

1

Вычислимые свойства не занимают места в памяти. Поэтому нет причин для их инициализации. Он будет вычисляться при доступе к ресурсу.

Смежные вопросы