枚举关联的值和泛型

时间:2018-10-29 12:35:02

标签: swift generics enums associated-value

我有一个这样的枚举,它包含不同的初始状态:

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中访问它?

1 个答案:

答案 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