我試圖創建一個依賴於另一個以下列方式恆定不變斯威夫特:依賴於其他不變
class Thingy {
let paddingConstant = 13.0
let paddingDict = ["padding": paddingConstant]
}
底線給我一個錯誤"Thingy.Type does not have a member named 'paddingConstant'"
。
是否有可能宣佈一個依賴於另一個恆定?
我試圖創建一個依賴於另一個以下列方式恆定不變斯威夫特:依賴於其他不變
class Thingy {
let paddingConstant = 13.0
let paddingDict = ["padding": paddingConstant]
}
底線給我一個錯誤"Thingy.Type does not have a member named 'paddingConstant'"
。
是否有可能宣佈一個依賴於另一個恆定?
作爲另一種解決方案,您可以使用外部結構定義(您可能需要等常量)常量:
struct Constants {
static let paddingConstant = 13.0
}
,然後在Thingy
類使用它:
class Thingy {
let paddingDict = ["padding": Constants.paddingConstant]
}
是的,這是可能的。你需要讓paddingDict只讀屬性計算
class Thingy {
let paddingConstant = 13.0
var paddingDict : [String : Double] {
get {return ["padding": paddingConstant] }
}
}
這將創建在每次使用paddingDict – giorashc
沒有它不會產生對每次使用的字典詞典,但會計算每使用,因爲你的paddingDice使用其他屬性來計算它的價值應該是一個計算財產的價值。您可以瞭解更多有關計算性能在這裏https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID254 –
@zellb你能說明明確指出的地方嗎?如果每次都計算屬性,那麼計算的一個步驟就是創建一個字典。 –
您可以移動paddingDict到init:
class Thingy {
let paddingConstant = 13.0
let paddingDict : [String: Double]
init() {
paddingDict = ["padding": paddingConstant]
}
}
另一種解決方案是聲明這個變量lazy
。其優點是,與計算屬性不同,它不會在您每次獲取其值時執行計算;但缺點是,它不能是一個常量,不幸的是:
class Thingy {
let paddingConstant = 13.0
lazy var paddingDict : [String:Double] =
["padding": self.paddingConstant]
}
我認爲這限制在斯威夫特語言的錯誤。
你可以如果b
定義爲static
,則使用另一個constant property b
的值填充instance constant property a
(在定義時間)。
class Thingy {
static let paddingConstant = 13.0
let paddingDict = ["padding": paddingConstant]
}
這是直接回答你得到了錯誤信息:
Thingy.Type沒有一個名爲 'paddingConstant'
逸岸成員通過使paddingConstant
一成不變的,它成爲Type property
:Thingy.Type
的一部分。
希望這會有所幫助。
是的,這是可能的。你需要讓paddingDict只讀屬性計算的 –
【如何初始化互相依賴的屬性]可能的複製(http://stackoverflow.com/questions/25854300/how-to-initialize-properties-that-depend-on -彼此)。然而 –