initWithDictionary: в Objective-C и Swift
В Objective-C мы можем использовать сопоставление объектов с JSON-откликом следующим образом
PolicyData *policyData = [[PolicyData alloc] initWithDictionary:responseObject error:&err];
Здесь мы можем сопоставить responseObject со свойствами класса PolicyData. Как я могу сделать то же самое в Swift?
2 ответа
Это должно быть так же просто, как добавление соединительного заголовка (потому что PolicyData
скорее всего написано в Objective-C). Инструкции о том, как это сделать, можно увидеть в этой документации Apple.
Тогда вы можете создать это PolicyData
возражать так же легко, как делать:
do {
let newPolicyDataObject = try PolicyData(responseObject)
} catch error as NSError {
print("error from PolicyData object - \(error.localizedDescription)")
}
Это предполагает ваш responseObject
является NSDictionary. А Swift 2 услужливо (?) Превращает параметры ошибок в блоки try/catch.
То есть PolicyData's
- (instancetype) initWithDictionary:(NSDictionary *)responseObject error:(NSError *)err;
объявление волшебным образом становится
func initWithDictionary(responseObject : NSDictionary) throws
как описано в разделе "Обработка ошибок" этого документа о совместимости Apple Objective-C/Swift.
Вы можете добавить
convenience init?(dictionary: NSDictionary)
для любого объекта, который вы хотите инициализировать из словаря и инициализировать его свойства там.
Тем не менее, поскольку swift не выполняет динамическую диспетчеризацию (рано или поздно), вы не можете обобщать это, ожидая, что имена свойств будут ключами в словаре для любого объекта.