我有一个这样的枚举,它包含不同的初始状态:
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
中访问它?
答案 0 :(得分:2)
出现异常的原因:
在下面的代码中,
let test = inital as! T
您正在将InitialState
类型转换为T
。并且根据您的代码,通用类型T
的类型为ListTableViewState
。
T
类型为ListTableViewState
的原因源自
tableViewState = loadInitialState(inital: test1)
在这里,tableViewState
的类型为ListTableViewState
这是类型转换到其他类型失败并引发异常的原因。
解决方案:
您可以使用 associated value
来访问enum
case
的{{1}},即
switch statement