Swift реализует протокол LiteralConvertible
Я пытаюсь реализовать протокол IntegerLiteralConvertible наUIColor
, То, что я действительно хотел бы сделать, это
let black: UIColor = 0x000000
Я сначала попробовал следовать за быстрым блогом здесьhttps://developer.apple.com/swift/blog/?id=8 который не работает из коробки. Похоже, по быстрому течениюhttps://github.com/ksm/SwiftInFlux#literalconvertible-protocols-use-constructor что они больше не используют convertFromIntegerLiteral и вместо этого используют инициализатор. Соответственно, это то, что мы должны иметь:
extension UIColor: IntegerLiteralConvertible {
public convenience init(integerLiteral value: IntegerLiteralType) {
UIColor(red: 1, green: 0, blue: 0, alpha: 1)
}
}
Но что тогда происходит внутри инициализатора? Я не могу установить себя. Я хотел бы сказать что-то вроде
self.init(red: 0, green: 0, blue: 0, alpha: 1)
это не работает и не делает ничего другого, как кажется. Я получаю сообщение об ошибке «Требование инициализатора init (IntegerLiteral) может быть удовлетворено только« обязательным »инициализатором в определении не финального класса UIColor», что не очень полезно. Есть идеи, как заставить это работать?