2017-02-07 16 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

viewDidLoad が呼び出される前に、クラスのすべてのプロパティが初期化されるべきではありませんか?

スウィフトDocumentation - Propertiesを参照いいえ、:

実際に値を格納しない:

は、プロパティを計算しました。代わりに、ゲッター とオプションのセッターを提供して、間接的に他のプロパティと値 を取得して設定します。

計算されたプロパティの値は、計算されたプロパティの値をデフォルトで設定することはできません。 (その値は、-letの他の格納されたプロパティ値に基づいていなければなりません)。

アクセスした後は、計算を実行する必要があります。

これが役に立った。

1

計算されたプロパティはメモリ内の領域を占有しません。したがって、初期化される理由はありません。プロパティにアクセスすると計算されます。

関連する問題