簡體   English   中英

枚舉關聯的值和泛型

[英]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 caseassociated 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM