Сделать мою простую структуру кодируемой в Swift 4 не работает - PullRequest
0 голосов
/ 04 сентября 2018

Я новичок в Swift4. Я пытаюсь использовать Codable, чтобы сделать мой тип объекта struct кодируемым и декодируемым в JSON.

Вот мой struct Product:

// Я заявляю, что он соответствует кодируемым

public struct Product: Codable {
  public let name: String
  public var isSold: Bool
  public let icon: UIImage // problem is here

  …

  // I have excluded 'icon' from codable properties
  enum CodingKeys: String, CodingKey {
        case name
        case isSold = “is_sold”
    }
}

Компилятор сообщает мне об ошибке: 'UIImage’ doesn’t conform to ‘Decodable’, но я определил CodingKeys, который должен сообщать, какие свойства должны быть кодируемыми, и я исключил свойство UIImage.

Я думал, что таким образом компилятор не будет жаловаться на этот тип UIImage, но все равно будет жаловаться. Как избавиться от этой ошибки?

1 Ответ

0 голосов
/ 04 сентября 2018

Поскольку UIImage не может быть декодирован и не имеет значения по умолчанию, протокол Decodable не может синтезировать инициализатор.

Если вы сделаете icon необязательным UIImage и назначите nil в качестве значения по умолчанию, вы сможете декодировать остальную часть структуры из JSON.

public struct Product: Codable {
    public let name: String
    public var isSold: Bool
    public var icon: UIImage? = nil 
    enum CodingKeys: String, CodingKey {
        case name
        case isSold = "is_sold"
    }
}

Вы также можете сделать его необязательным и назначить изображение-заполнитель.

Обратите внимание: в зависимости от версии Swift вам может не понадобиться начальное значение = nil.

...