То, что вам, вероятно, придется делать, - это при преобразовании из типов JSON в базовые типы иметь значения типа Any
. Например:
guard let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as! [String:Any] else {
return
}
Затем вам нужно будет протестировать тип полученного значения и соответствующим образом обработать каждую ситуацию:
guard let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as! [String:Any] else {
return
}
switch jsonObject["key"] {
case let int as Int:
//Handle Int scenario
case let string as String:
//Handle String scenario
case let bool as Bool:
//Handle Bool scenario
case let array as Array:
//Handle array scenario
case nil:
//Handle null scenario
default:
//Other type?
}
После этого вы можете иметь свойство типа Any
в вашей модели, которая будет приведена к определенному типу позже. Точно так же вы можете иметь несколько необязательных свойств для каждого типа. Например, ваша модель может иметь следующие свойства:
class MyModel {
var int: Int?
var string: String?
var bool: Bool?
var array: Array?
}
И тогда для каждого экземпляра этой модели будет установлено только одно из этих четырех необязательных свойств. Затем вы, конечно, будете проверять и обрабатывать каждый сценарий.