Ошибка Swift2 to Swift3 - невозможно присвоить значение типа 'NSDictionary?'набрать 'AddressModel' - PullRequest
0 голосов
/ 17 апреля 2019

Перемещение приложения из Swift2 в Swift3, и я столкнулся с ошибкой, которую не смог исправить после попытки нескольких разных предложений.

lazy var address: AddressModel? = {
        [unowned self] in
        var dict = self.getpayloadDict()

        var model: AddressModel
        model = dict
        return model
        }()

model = dict throws Невозможно назначить значение типа 'NSDictionary?набрать 'AddressModel'

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 Ответ

0 голосов
/ 17 апреля 2019

Ошибка должна возникать и в 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. И, пожалуйста, соблюдайте соглашение об именах, согласно которому имена переменных начинаются со строчной буквы.

...