Как сделать 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

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