Swift 4标签属性
我从swift快速移动到swift 4.我有UILabels,我给非常具体的文本属性的标签。 当我正在初始化strokeTextAttributes的时候,我得到了“意外地发现了零,同时展开可选值”的错误。 我完全失去坦率。
在swift 3中,strokeTextAttributes是[String:Any],但是Swift 4抛出错误,直到我将它改变为下面的内容。
let strokeTextAttributes = [ NSAttributedStringKey.strokeColor.rawValue : UIColor.black, NSAttributedStringKey.foregroundColor : UIColor.white, NSAttributedStringKey.strokeWidth : -2.0, NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18) ] as! [NSAttributedStringKey : Any] chevronRightLabel.attributedText = NSMutableAttributedString(string: "0", attributes: strokeTextAttributes)
@ Larme对不需要的.rawValue的评论是正确的。
此外,您可以避免强制转换使用明确的键入来崩溃您的代码:
let strokeTextAttributes: [NSAttributedStringKey: Any] = [ .strokeColor : UIColor.black, .foregroundColor : UIColor.white, .strokeWidth : -2.0, .font : UIFont.boldSystemFont(ofSize: 18) ]
这摆脱了重复的NSAttributedStringKey.
也是。
Swift 4build议你自己解决scheme。 在Swift 4.0中,属性string接受键types为NSAttributedStringKey
json(dictionary)。 所以你必须把它从[String : Any]
改为[NSAttributedStringKey : Any]
Swift 4.0中AttributedString
初始化器更改为[NSAttributedStringKey : Any]?
这里是Swift 4.0的初始化语句/函数
public init(string str: String, attributes attrs: [NSAttributedStringKey : Any]? = nil)
这里是示例工作代码。
let label = UILabel() let labelText = "String Text" let strokeTextAttributes = [ NSAttributedStringKey.strokeColor : UIColor.black, NSAttributedStringKey.foregroundColor : UIColor.white, NSAttributedStringKey.strokeWidth : -2.0, NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18) ] as [NSAttributedStringKey : Any] label.attributedText = NSAttributedString(string: labelText, attributes: strokeTextAttributes)
现在看看Apple的这个注释: NSAttributedString – 创build一个NSAttributedString对象
NSAttributedStringKey.strokeColor.rawValue
是String
types的
NSAttributedStringKey.strokeColor
的types是NSAttributedStringKey
所以它无法将String
转换为NSAttributedStringKey
。 你必须使用如下所示:
let strokeTextAttributes: [NSAttributedStringKey : Any] = [ NSAttributedStringKey.strokeColor : UIColor.black, NSAttributedStringKey.foregroundColor : UIColor.white, NSAttributedStringKey.strokeWidth : -2.0, NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18) ]