Как сделать UIFont совместимым с декодируемымIOS

Программируем под IOS
Ответить
Anonymous
 Как сделать UIFont совместимым с декодируемым

Сообщение Anonymous »

Я пытаюсь привести UIFont в соответствие с Decodable, но у меня возникают трудности.

В настоящее время у меня есть решение, в котором я обертываю UIFont в структуру Font, подобную этой

Код: Выделить всё

public struct Font: Decodable{
let font: UIFont

private enum CodingKeys: String, CodingKey {
case size
case font
}

public init(from decoder: Decoder){
do{
let values = try decoder.container(keyedBy: CodingKeys.self)
font = UIFont(name: try values.decode(String.self, forKey: .font), size: try values.decode(CGFloat.self, forKey: .size))!
} catch{
fatalError("Font configuration error:\(error)")
}
}
}
Это работает, но кажется неуклюжим, поэтому я попробовал вот так:

Код: Выделить всё

final class Font: UIFont, Decodable{
private enum CodingKeys: String, CodingKey {
case size
case font
}

convenience init(from decoder: Decoder)  {
do{
let values = try decoder.container(keyedBy: CodingKeys.self)
super.init(name: try values.decode(String.self, forKey: .font), size: try values.decode(CGFloat.self, forKey: .size))
} catch{
fatalError("Font configuration error:\(error)")
}
}
}
Однако это не работает, поскольку init(из декодера: Decoder) не может быть неудачным инициализатором, а UIFont.init(name: String, size: CGFloat) является неудачным инициализатором, и вызов неудачного инициализатора из нормального невозможен.

Любые предложения о том, как привести UIFont в соответствие с Декодируемость без упаковки приветствуется.

Подробнее здесь: https://stackoverflow.com/questions/563 ... -decodable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»