Ошибка Swift2 для Swift3 — не удается присвоить значение типа ‘NSDictionary?’ типу ‘AddressModel’

#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 в словаре отлично сработало!