Перечисляет связанные значения и дженерики
У меня есть перечисление как это, оно содержит различные начальные состояния:
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 ответ
Причина исключения:
В приведенном ниже коде
let test = inital as! T
Вы кастуете InitialState
введите в T
, И согласно вашему коду тип универсального типа 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
}