2017-09-22 1 views
2

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) 
    } 
} 

Antwort

2

Ich glaube, Sie verwenden sollten:

override func drawText(in rect: CGRect) { 
    let strokeTextAtrributes: [NSAttributedStringKey : Any] = [ 
     NSAttributedStringKey.strokeColor : outlineColor, 
     NSAttributedStringKey.strokeWidth : -1 * outlineWidth, 
    ] 
    self.attributedText = NSAttributedString(string: self.text ?? "", attributes: strokeTextAttributes) 
    super.drawText(in: rect) 
} 

weil Attribute Argument erwartet eine [NSAttributedStringKey : Any]? Typ

+0

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. –

+0

Wird in der Debug-Konsole keine Alternative angezeigt? –

Verwandte Themen