Я задаюсь вопросом о способе приведения предмета к Type1
или Type2
.
Для большей ясности приведу пример
Допустим, у нас есть два разных struct
наследования от Decodable
struct Decodable1: Decodable { ... }
struct Decodable2: Decodable { ... }
Я использую эти Decodable
s для анализа json, который получен из http
запросов. В нескольких местах я должен использовать эти данные как;
let data1 : [Decodable1] = [...]
let data2 : [Decodable2] = [...]
var data : [Decodable] = []
switch mode {
case .one:
data = data1 as! [Decodable1]
case .two:
data = data2 as! [Decodable2]
}
Я знаю, что этот путь довольно прост, и я думаю, что было бы не вредно, если бы я реализовал это только в одном месте. Тем не менее, приложение действительно зависит от этой переменной режима (которую я предоставляю как ReSwift State
), и в результате я пытаюсь найти более простой способ для этого. Как;
let data = (mode == .one) ? data1 : data2
Конечно, это не работает и бросить type mismatch error
Может кто-нибудь предложить хороший способ сделать это?
EDIT:
Кроме того, мое намерение, помимо сокращения операторов switch
, заключается в том, чтобы легко достичь определенных переменных внутри этих Decodable
s. Это означает, что мы не делаем никаких операторов switch
или if-else
.
Это возможно?
EDIT_2:
Я пересматриваю свой вопрос с учетом последних комментариев.
Допустим, у меня есть class
;
class MyClass {
var data1: [Decodable1] = [...]
var data2: [Decodable2] = [...]
var mode: Mode = .One
func myFunc() -> [Decodable] {
//return either data1 or data2 with respect to the mode and already casted to its type.
}
}
Возможно ли function
подобное?