У меня есть пользовательский класс, который я хочу, чтобы инициализировать из объекта JSON с помощью JSONCodable https://github.com/matthewcheok/JSONCodableОбработки неудачной инициализации в Swift
Так что я
public var id: String
public var name: String?
public var imageURL: NSURL?
и failable Инициализатором, который соответствует протоколу JSONCodable
required public init?(JSONDictionary: JSONObject) {
let decoder = JSONDecoder(object: JSONDictionary)
do {
id = try decoder.decode("id")
name = try decoder.decode("name")
if let imageURLString: String = try decoder.decode("image") {
imageURL = NSURL(string: imageURLString)
}
}
catch let error as NSError{
NSLog("\(error.localizedDescription)")
return nil
}
}
Я получаю ошибку компиляции на «Возвращение ноля» заявление: Всего сохраненный Свойс ies экземпляра класса должен быть инициализирован перед возвратом nil из инициализатора. Есть ли способ обойти это, помимо установки фиктивных значений? Одно из свойств, которые я хочу включить, доступно только для чтения, я действительно не хочу создавать сеттер, чтобы обойти компилятор. Я использую класс, а не структуру, как в примере кода JSONCodable, потому что я хочу подкласс. Одна из возможностей состоит в том, чтобы иметь инициализатор без сбоев, который выдает ошибку, но это не соответствует протоколу JSONCodable. Я довольно новичок в Swift, любые указатели на то, как с этим справиться, будут очень желанными.
Если у вас есть только одно свойство для проверки (в соответствии с вашим именем проекта и изображениемURL может быть 'nil' в классе), я бы извлек' id' перед вызовом инициализатора и объявил инициализатор невоспроизводимым. – vadian
Он должен быть несовместим с протоколом JSONCodable. Также этот пример является лишь доказательством концепции - у меня есть много других свойств для добавления. – primulaveris
В этом случае вы должны назначить всем нефакульным свойствам значение по умолчанию, например пустую строку для свойства 'id' – vadian