[英]Enums associated values and generics
我有一個這樣的枚舉,它包含不同的初始狀態:
enum InitialState {
case listTableView(ListTableViewState)
}
我想這樣使用它們:
var tableViewState: ListTableViewState?
let test = ListTableViewState(group: .large, statIntervalBase: StatIntervalBaseModel(stat: "ppc", interval: "24h", base: "usd"), order: .ascending, searchParameter: "", quantityStats: .six)
let test1 = InitialState.listTableView(test)
tableViewState = loadInitialState(inital: test1)
這是我正在使用的通用函數:
func loadInitialState<T>(inital: InitialState) -> T {
let test = inital as! T
print(test)
return test
}
我當然會收到此錯誤:
無法將類型'InitialState'(0x109466da0)的值強制轉換為'ListTableViewState'(0x1094912b0)。
如何在通用函數loadInitialState
訪問它?
異常原因:
在下面的代碼中,
let test = inital as! T
您正在將InitialState
類型轉換為T
根據您的代碼,泛型T
類型為ListTableViewState
。
T
屬於ListTableViewState
類型的原因源自於,
tableViewState = loadInitialState(inital: test1)
在這里, tableViewState
的類型為ListTableViewState
這就是將類型轉換為其他類型失敗並引發異常的原因。
解:
您可以使用switch statement
訪問enum
case
的associated value
,即
func loadInitialState<T>(inital: InitialState) -> T? {
switch inital {
case .listTableView(let test):
return test as? T
}
return nil
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.