2017-09-02 98 views
1

我正在使用Swift iBook進行Apple的應用程序開發,直到結構章節,特別是在屬性觀察部分期間,它一直非常流暢地航行。我負責檢查單位轉換。無法爲不帶參數的Height類型調用初始值設定項

struct Height { 
    var heightInInches: Double { 
     willSet(imperialConversion) { 
      print ("Converting to \(imperialConversion)") 
     } 
     didSet { 
      if (heightInInches == (heightInCentimeters * 0.393701)) { 
       print ("Height is \(heightInInches)") 
      } 
     } 
    } 
    var heightInCentimeters: Double { 
     willSet(metricConversion) { 
      print ("Converting to \(metricConversion)") 
     } 
     didSet { 
      if (heightInCentimeters == (heightInInches * 2.54)) { 
       print ("Height is \(heightInCentimeters)") 
      } 
     } 
    } 
    init(heightInInches: Double) { 
     self.heightInInches = heightInInches 
     self.heightInCentimeters = heightInInches*2.54 
    } 

    init(heightInCentimeters: Double) { 
     self.heightInCentimeters = heightInCentimeters 
     self.heightInInches = heightInCentimeters/2.54 
    } 
} 

let newHeight = Height() 
newHeight.heightInInches = 12 

從書和Swift文檔,我認爲這應該工作。但是,我收到一條錯誤消息:

「無法爲不帶參數的'Height'類型調用初始值設定項。

  1. 這是什麼意思,什麼我誤解?
  2. 我該如何解決這個問題?在底部
+0

@Shades是正確的。在這種情況下,你可以認爲'Height'的行爲就像'Class'一樣。既然你已經定義了兩個入口 - init(heightInIches:)和init(heightInCentimeters:) - ,你不能像這樣「實例化」newHeight。 (我還補充說,你可以使用* *,但你的第二行代碼表明你想要第一個初始化。 – dfd

回答

0

你一個行應該是:

let newHeight = Height(heightInInches: 12) 

heightInInches是要傳遞給init方法的參數。

+0

好吧!我輸入了它,它似乎工作,但字符串(「轉換爲...)沒有在控制檯上打印,我只拿到了20的號碼 –

+0

@MichaelFarris你在書中看到了這個註釋(重點是我的):*「當一個屬性被設置爲一個屬性時,將調用超類屬性的willSet和didSet觀察者子類初始化器,在超類初始化器被調用後**在超類初始化器被調用**之前,它們不被調用,而類正在設置它自己的屬性。「* – rmaddy

相關問題