2017-07-10 40 views
0

以下代碼的在遊樂場的聲明得到:返回而不初始化爲結構聲明所有存儲屬性誤差在遊樂場

「從初始化返回而不初始化所有存儲的屬性」

struct Height { 
    var heightInInches: Double 
    var heightInCentimeters: Double 

    init(heightInInches: Double) { 
     self.heightInInches = heightInInches // here's the compile error 
    } 
    init(heightInCentimeters: Double) { 
     heightInInches = heightInCentimeters * 2.54 // here's the compile error 
    } 
} 

請幫我糾正語法。

+0

你需要在init方法返回之前初始化這兩個變量,爲了避免這種情況,你可以聲明這個爲惰性變量或聲明爲optionals,實際上我認爲最好的方法是初始化只有一個變量,另一個將被計算一個 –

+1

是的,你的一個變量應該是一個計算變量。另請看[NSMeasurement](https://developer.apple.com/documentation/foundation/nsmeasurement) – Paulw11

回答

0

這就是你的意思做:

struct Height { 

    var heightInInches: Double 
    var heightInCentimeters: Double { return heightInInches/2.54 } 

    init(heightInInches: Double) { 
     self.heightInInches = heightInInches 
    } 

    init(heightInCentimeters: Double) { 
     heightInInches = heightInCentimeters * 2.54 
    } 
} 

heightInCentimeters現在是一個怎麼計算的屬性,而不是一個存儲的屬性。 (或者,如果你不需要,你可以擺脫heightInCentimeters)。由於heightInInchesvar屬性,因此可確保兩者始終保持同步。