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.rawValueStringtypes的

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