[英]Swift enum with custom object raw value
我嘗試為ViewController實現狀態機,所以我創建了一個枚舉來表達ViewController的可能狀態:
enum SMState:RawRepresentable{
case empty,data(UIView),failed(UIView),noData(UIView)
}
enum SMState:RawRepresentable{
case empty,data(UIView),failed(UIView),noData(UIView)
typealias RawValue = UIView
init?(rawValue: SMState.RawValue) {
// rawValue is a view but i can't judge what to return
return what???
}
var rawValue: UIView{
switch self {
case .data(let v):
return v
case .failed(let v):
return v
case .noData(let v):
return v
case .empty:
return UIView()
}
}
}
init?(rawValue:SMState.RawValue)
上面的函數,我無法映像該怎么做。 RawRepresentable
: 我認為enum
更適合ViewController
而不是Class or Struct
可表示不同狀態,但是enum
不能包含stored property
,它只能通過RawRepresentable
攜帶UIView
Object,歡迎任何更好的主意或魔術:D
@Hamish您說得對,我不應該堅持使用RawRepresentable
,經過一番好覺后,我終於將想要的內容存檔了:
//: Playground - noun: a place where people can play
import UIKit
enum SMState{
case empty,data(UIView),failed(UIView),noData(UIView)
}
extension SMState{
init() {
self = .empty
}
init(failed view:UIView) {
self = .failed(view)
}
init(data view:UIView) {
self = .data(view)
}
init(noData view:UIView) {
self = .noData(view)
}
}
let state = SMState(failed: UIView())
switch state {
case .failed(let v):
print(v)
default:break
}
enum
狀態擁有一個單獨的View
,我使用狀態攜帶的View
在不同的狀態下執行不同的操作〜 Class
,在我的情況下,我不確定可能會有更多的狀態,所以不可能擴展或子類化SMState
因為它是一個enum
,我正在考慮使用Class
任何建議都歡迎〜
您已經可以使用一種特定的狀態機來代替發明輪子: GKStateMachine 。 它具有從狀態轉換到狀態的所有必需方法。 我們還將它用於不同的視圖控制器狀態。 只需花一些時間閱讀一下並找到一些示例,以使您的代碼簡潔明了。 您還可以將實現與相應的狀態枚舉結合起來,狀態枚舉僅定義狀態而無需在此處具有關聯的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.