Swift枚舉有各種各樣的奇蹟,比如初始化,並且你可以編寫一個變異函數,等等。Swift枚舉:在值更改上執行代碼?
但是我想知道,你可以簡單地使用它運行一些代碼,當值變化時?
所以,當然使用屬性+枚舉,你可以做到這一點......這是太棒了。
(注意,下面vadian給人正是這樣做的一個很好的完整的例子。)
所以我的問題很簡單,沒有斯威夫特枚舉有一個功能,可以讓你運行代碼每當值改變?
或者,總之,您是否必須使用屬性/變量組合?
Swift枚舉有各種各樣的奇蹟,比如初始化,並且你可以編寫一個變異函數,等等。Swift枚舉:在值更改上執行代碼?
但是我想知道,你可以簡單地使用它運行一些代碼,當值變化時?
所以,當然使用屬性+枚舉,你可以做到這一點......這是太棒了。
(注意,下面vadian給人正是這樣做的一個很好的完整的例子。)
所以我的問題很簡單,沒有斯威夫特枚舉有一個功能,可以讓你運行代碼每當值改變?
或者,總之,您是否必須使用屬性/變量組合?
但我想知道如果從字面上在Swift中的枚舉中有一個概念來「值改變時運行代碼」。
編號枚舉是一個值類型。當數值發生變化時,舊數值將被完全破壞並被替換爲新數值。如果你想要可變狀態,你應該使用一個類或可變結構,並且使用一個屬性didSet
。
聲明RaceState
類型的一個實例變量/屬性並改變在觀察者didSet
enum RaceState { case Gate, Laps, Pits }
class Foo {
var raceState : RaceState {
didSet {
if oldValue != raceState {
switchState(raceState)
}
}
}
init(state : RaceState) {
self.raceState = state
switchState(state)
}
func switchState(state : RaceState)
{
switch state {
case .Gate:
engine.sound = false
lights.hidden = true
score.hidden = true
start.hidden = false
case .Laps:
engine.sound = true
lights.hidden = true
score.hidden = false
start.hidden = false
case .Pits:
engine.sound = true
lights.hidden = false
score.hidden = true
start.hidden = false
}
}
}
說亞倫的值。我明白答案是「不」,謝謝你。然而,幫助我明白你的意思*「枚舉是一種值類型,當值改變時,舊值被完全破壞並被新的替換」* ...發生在任何屬性(這可能確實是一個枚舉)包括值類型的普通情況。當然,運行一些代碼是非常正常的,當一個值類型發生改變時。所以我不確定我是否按照你的意思去推理那裏的「推理」。無論如何,謝謝! – Fattie
把它想象成一個'Int'。如果'var x = 3',當你稍後說'x = 4'時,你不會指望'Int','3'能夠做出反應。 3被簡單地銷燬並被4所取代。從「Int」的角度來看,沒有任何變化。同樣,當你改變枚舉時,'Gate'可能會被銷燬並被'Laps'取代。 –
我想這很有道理。如果你把Int作爲一個財產 - 那是另一回事。這不是那個必須知道的Int 3。 – Fattie