2014-11-01 75 views
3

我想在Swift中創建一個計算屬性,我需要一個實例變量來保存屬性的狀態。斯威夫特計算的Swift實例變量的屬性?

這種情況特別是當我試圖重寫我的超類的屬性:

class Jedi { 
    var lightSaberColor = "Blue" 
} 


class Sith: Jedi { 
    var _color = "Red" 
    override var lightSaberColor : String{ 
     get{ 
      return _color 
     } 
     set{ 
      _color = newValue 
     } 
    } 

} 

我重寫存儲的屬性lightSaberColor在絕地與計算性能,因爲這是編譯器將讓唯一途徑我。這也迫使我創造一個getter和setter(這是有道理的)。那時我遇到了麻煩。

到目前爲止,我發現的唯一方法是定義這個額外和醜陋的變種_color。你是一個更優雅的解決方案嗎?

我試着在屬性塊中定義_color,但它不會編譯。

有一個更好的方法!

+1

爲什麼你需要重寫屬性?這背後肯定有一個原因,我認爲這可以爲你提供一個正確的答案 – Antonio 2014-11-01 19:30:50

+0

這只是一個例子。真正的問題是如何處理計算屬性中的iVar – cfischer 2014-11-01 21:35:04

+0

爲什麼你打開2個問題來解決同一個問題?關閉一個。 – Shuo 2014-11-02 03:33:50

回答

5

您擁有它的方式是目前唯一可行的方式 - 我所做的唯一更改是將_color聲明爲private

根據您的需要,與willGet和/或didSet處理程序一起存儲屬性可能已足夠。

+0

這是個好主意,我喜歡。 :-) – cfischer 2014-11-02 12:59:52

3

爲什麼不把它設置在初始值設定項中?

class Jedi { 
    var lightSaberColor = "Blue" 
} 

class Sith: Jedi { 
    override init() { 
     super.init() 
     self.lightSaberColor = "Red" 
    } 
}