#swift3 #nsdictionary
#swift3 #nsdictionary
Вопрос:
Перемещение приложения из Swift2 в Swift3, и я столкнулся с ошибкой, которую не смог исправить, попробовав несколько разных предложений.
lazy var address: AddressModel? = {
[unowned self] in
var dict = self.getpayloadDict()
var model: AddressModel
model = dict
return model
}()
model = dict выдает Не удается присвоить значение типа ‘NSDictionary?’ типу ‘AddressModel’
Адресная модель . . .
class AddressModel: Deserializable {
var City: String?
var State: String?
var PostalCode: String?
required init(data: [String: AnyObject]) {
City = data["City"] as! String?
State = data["State"] as! String?
PostalCode = data["PostalCode"] as! String?
}
}
Любая помощь приветствуется.
Ответ №1:
Предполагается, что ошибка также возникает в Swift 2. Это довольно ясно: getpayloadDict()
возвращает словарь, который не соответствует AddressModel
.
Вы можете создать AddressModel
экземпляр из словаря
lazy var address: AddressModel? = { // this closure does not cause a retain cycle
let dict = self.getpayloadDict()
return AddressModel(data: dict)
}()
Примечание сбоку:
as! String?
(принудительно развернуть необязательное в необязательное) — ужасный синтаксис. Используйте обычное условное понижение as? String
. И, пожалуйста, соблюдайте соглашение об именовании, чтобы имена переменных начинались со строчной буквы.
Комментарии:
1. Спасибо — я был удивлен, что это сработало в Swift2, так как, похоже, там тоже должно быть ошибка. Создание экземпляра AddressModel в словаре отлично сработало!