У меня есть, например, enum
, и я хочу заархивировать то, что каждый enum case
может дать мне какой-то другой тип вывода для, скажем, функции. Пример кода:
protocol MyType: Codable {
var id: String {get set}
}
struct Type1: MyType {
var id: String
var name:String
}
struct Type2: MyType {
var id: String
var amount: Int
}
enum ReturnType {
case first, second
//Option 1
func getElement() -> MyType {
switch self {
case .first:
return Type1(id: "1", name: "Name")
case .second:
return Type2(id: "2", amount: 10)
}
}
//Some crap is here - don't pay attention
func test<T:MyType>(data: T) -> T {
return data
}
}
//Option 2
func getElement(ofType type: ReturnType) -> MyType {
switch type {
case .first:
return Type1(id: "1", name: "Name")
case .second:
return Type2(id: "2", amount: 10)
}
}
let test1 = ReturnType.first.getElement() as! Type1
let test2 = ReturnType.second.getElement()
let test3 = getElement(ofType: .first)
Таким образом, в настоящее время только test1
- это Type1
, но test2
и test3
- MyType
Я хочу заархивировать строгую типизацию без принудительного ввода с помощью as!
![enter image description here](https://i.stack.imgur.com/z2b5y.png)
Я пытался сделать это с помощью дженериков, но безуспешно. Есть мысли? Очень признателен! Спасибо!