iOS: Как использовать декодируемый для класса модели с переменной типа протокол - PullRequest
0 голосов
/ 29 февраля 2020

Вопрос: Существует класс модели, соответствующий Decodable, эта модель имеет переменную типа someProtocol. Но компилятор выдает ошибку,

Ошибка компилятора

Type 'MyModel' does not conform to protocol 'Decodable'
Protocol requires initializer 'init(from:)' with type 'Decodable'
Cannot automatically synthesize 'Decodable' because 'SomeProtocol' does not conform to 
'Decodable'

Фрагмент кода

class MyModel: Decodable {
var name: String?
var employee: SomeProtocol?

enum CodingKeys: String, CodingKey {
    case name
    case employee
}

} // Enf of class MyModel

protocol SomeProtocol {
 var employeeName: String ? { get }
}

1 Ответ

0 голосов
/ 29 февраля 2020

[решено] Привет, так что я думаю, что этот вопрос был действительным, и после некоторого поиска я смог решить. Класс MyModel не может иметь тип протокола, должен быть конкретный класс типов, который наследует протокол. Объект теперь также декодируется с помощью вложенных других объектов модели.

Исправлено над кодом

class MyModel: Decodable {
var name: String?
var employee: OtherModel?

enum CodingKeys: String, CodingKey {
case name = "DepartmentName"
case employee
}

} // End of class MyModel

class OtherModel: SomeProtocol {
var employeeName: String?
}

protocol SomeProtocol: Decodable {
 var employeeName: String? { get }
}

Примечание: В этом случае не требуется init (от decoder: Decoder).

...