Делать класс кодируемым - PullRequest
2 голосов
/ 25 июня 2019

У меня есть протокол Codable и класс Codable:

public protocol SourceListItem: AnyObject, Codable
{
    var name: String { get set }
    var children: [SourceListItem] { get set }
}

final public class SourceListHeader: Codable
{
    var name: String = "Give me a name!"
    var children: [SourceListItem] = [SourceListItem]()
}

Однако компилятор выдает мне две ошибки:

Type 'SourceListHeader' does not conform to protocol 'Decodable'
Type 'SourceListHeader' does not conform to protocol 'Codable'

Почему это так?Я не могу исправить ошибку, и я попробовал много вариантов ...

Проблема, кажется, исходит от протокола, потому что, если я удаляю его, все работает нормально.Как будто компилятор не видит, что протокол применим только к классам Codable.

1 Ответ

1 голос
/ 25 июня 2019

Вам нужен конкретный тип, соответствующий Codable, вы не можете использовать протокол, соответствующий Codable.

final public class SourceListHeader<Item: Codable>: Codable {
    var name: String = "Give me a name!"
    var children = [Item]()
}
...