在下面的銀行代碼,對於某些類型T:HasDefaultValues
,在init(variableValue: T)
的分配不會發生和成員variable
採取的T.defaultValue
值:爲什麼Swift中的任務不會發生?
protocol HasDefaultValues : Equatable {
static var defaultValue: Self {get}
static var alternativeValue: Self {get}
}
class MyClass<T:HasDefaultValues> : NSObject, NSCoding {
var variable: T = T.defaultValue
init(variableValue: T) {
self.variable = variableValue // Executed, but assignment doesn't happen!
super.init()
}
// ... More code follows
}
使用調試器我有單步的代碼,並確認variableValue
的值與預期的一樣,即執行通過self.variable = variableValue
分配,但self.variable
的值不會更改。該代碼按照預期爲許多其他類型T:HasDefaultValues
。可能這是一個編譯器錯誤?
沒有進行賦值的類型爲T:HasDefaultValues
的代碼非常複雜,我沒有試圖將事物減少到最小可重現的例子。我在這裏問的是,除了編譯器錯誤之外,是否有充分的理由讓一個簡單的任務失敗。如果有的話,這將有助於將事物減少到一個最小可重現的例子。
在此先感謝。
請向我們展示一個可驗證的工作示例,以便我們可以爲您驗證此行爲。也就是說,你應該能夠包含一個符合'MyClass'中'NSCoding'的縮小示例,以及一些擴展和符合'HasDefaultValues'類型的'MyClass'的簡單示例用法。 – dfri
如果你不打算在代碼的生命週期中改變它,你可以聲明你的變量爲'let',這會給你更多的源代碼的穩定性。 – Cristik
@Cristik當'variable'被設置爲默認初始值時,如果聲明爲不可變變量('let'),它在初始化器中不會變化。 – dfri