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)类型的值强制转换为
如何在泛型函数中访问它 loadInitialState ?
loadInitialState
异常原因:
在下面的代码中,
let test = inital as! T
你在选演员 InitialState T . 根据你的代码,泛型的类型 是 ListTableViewState .
InitialState
T
ListTableViewState
T 属于类型 ListTableViewState
tableViewState = loadInitialState(inital: test1)
在这里, tableViewState ListTableViewState
tableViewState
这就是将类型转换为其他类型失败并引发异常的原因。
您可以访问 associated value enum case 使用 switch statement ,即。
associated value
enum
case
switch statement
func loadInitialState<T>(inital: InitialState) -> T? { switch inital { case .listTableView(let test): return test as? T } return nil }