代码之家  ›  专栏  ›  技术社区  ›  PaFi

枚举关联的值和泛型

  •  1
  • PaFi  · 技术社区  · 7 年前

    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 ?

    1 回复  |  直到 7 年前
        1
  •  2
  •   PGDev    7 年前

    异常原因:

    在下面的代码中,

    let test = inital as! T
    

    你在选演员 InitialState T . 根据你的代码,泛型的类型 是 ListTableViewState .

    T 属于类型 ListTableViewState

    tableViewState = loadInitialState(inital: test1)
    

    在这里, tableViewState ListTableViewState

    这就是将类型转换为其他类型失败并引发异常的原因。

    您可以访问 associated value enum case 使用 switch statement ,即。

    func loadInitialState<T>(inital: InitialState) -> T?  {
        switch inital {
        case .listTableView(let test):
            return test as? T
        }
        return nil
    }