Ich habe eine benutzerdefinierte Klasse von UIOutlineLabel, die einen Umriss um den Text innerhalb eines Etiketts zeichnet. Seit der Aktualisierung auf Swift 4 bekomme ich den folgenden Fehler:
Wert des Typs '[String: Any]' kann nicht in den erwarteten Argumenttyp '[NSAttributedStringKey: Any]?' Konvertiert werden.XCode 9: Wert des Typs '[String: Any]' kann nicht in den erwarteten Argumenttyp '[NSAttributedStringKey: Any]?' Konvertiert werden. '
Ich habe versucht, die strokeTextAttributes Wechsel zu:
as! [NSAttributedStringKey : Any]
aber dies führt zu einem Laufzeitfehler.
Es gibt auch die Swift Language-Laufzeitwarnungen von 'UIOutlineLabel setOutlineWidth ist veraltet und wird in Swift 4 entfernt' & 'UIOutlineLabel setOutlineColor ist veraltet und wird in Swift 4 entfernt'.
Alter Code:
import UIKit
class UIOutlineLabel: UILabel {
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}
*/
var outlineWidth: CGFloat = 1
var outlineColor: UIColor = UIColor.white
override func drawText(in rect: CGRect) {
let strokeTextAttributes = [
NSAttributedStringKey.strokeColor.rawValue : outlineColor,
NSAttributedStringKey.strokeWidth : -1 * outlineWidth,
] as! [String : Any]
self.attributedText = NSAttributedString(string: self.text ?? "", attributes: strokeTextAttributes)
super.drawText(in: rect)
}
}
Dank dieser den Absturz löst aber was über die Laufzeit-Warnungen von ' UIOutlineLabel setOutlineWidth ist veraltet und wird in Swift 4 entfernt. & UIOutlineLabel setOutlineColor ist veraltet und wird in Swift 4 entfernt. –
Wird in der Debug-Konsole keine Alternative angezeigt? –