iOS - Как объявить свойство перечисления Swift с неизвестным типом? - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь создать перечисление Swift, которое объявляет свойство Type, чтобы я мог вызвать Enum.type из вызова JSONDecoder().decode.Я хотел бы знать следующее:

  1. Возможно ли это даже в Swift?
  2. Как бы выглядел синтаксис?

Я дал егоследующая попытка:

enum Item {
        case property1, property2, property3

        var type: Any<T> {
            switch self {
            case .property1: return ACustomObjectType
            case .property2: return AnotherCustomObjectType
            case .property3: return AThirdCustomObjectType
            }
        }
    }

Теперь, очевидно, это не компилируется, но фрагмент, из которого я хочу вызвать его, будет выглядеть так:

JSONDecoder().decode(Item.type, from: data)

Также вполне возможно, что яЯ просто пытаюсь быть слишком умным, и есть гораздо более простое решение.

1 Ответ

0 голосов
/ 05 июня 2018

Попробуйте это решение

class CustomObject:Decodable {
    var id:String
    var name: String
    var age: String
}

class ACustomObject: CustomObject {

}

class AnotherCustomObject: CustomObject {

}

class AThirdCustomObject:CustomObject {

}


enum Property  {
    case property1
    case property2
    case property3

    var type:CustomObject.Type {
        get  {
            switch self {
            case .property1: return ACustomObject.self
            case .property2:  return AnotherCustomObject.self
            case .property3: return AThirdCustomObject.self
            }
        }
    }


}
let dic = ["id": "122342", "name": "stackoverflow", "age": "22"]

let json = try! JSONSerialization.data(withJSONObject: dic, options: .prettyPrinted)

do {
    let result =  try JSONDecoder().decode(Property.property1.type, from: json)
    print(result.name)

}catch {
    print(error)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...