我不确定如何更新此代码:
func textWidth(text: String, font: UIFont?) -> CGFloat
{
let attributes = font?.fontDescriptor.fontAttributes
return text.size(withAttributes: attributes).width
}
斯威夫特4抱怨:
无法转换类型' [UIFontDescriptor.AttributeName:Any]的值?'预期的参数类型' [NSAttributedStringKey:Any]?'
我不知道他们为什么打破这个,但它不会自动修复。
答案 0 :(得分:4)
我想,你想写这样的东西:
(斯威夫特4)
func textWidth(text: String, font: UIFont?) -> CGFloat {
let attributes = font != nil ? [NSAttributedStringKey.font: font!] : [:]
return text.size(withAttributes: attributes).width
}
(斯威夫特3)
func textWidth(text: String, font: UIFont?) -> CGFloat {
let attributes = font != nil ? [NSFontAttributeName: font!] : [:]
return text.size(attributes: attributes).width
}
即使类型匹配, fontAttributes
也不是size(withAttributes:)
(Swift 3中size(attributes:)
)的有效输入。
答案 1 :(得分:4)
(SWIFT 4更新)
func textWidth(text: String, font: UIFont?) -> CGFloat {
let attributes = font != nil ? [NSFontAttributeName: font] : [:]
return text.size(withAttributes: attributes).width
}
希望它有所帮助。
答案 2 :(得分:0)
在Swift 4中执行此操作的另一种方法是避免处理可选项,如下所示:
extension UIFont {
func textWidth(s: String) -> CGFloat
{
return s.size(withAttributes: [NSAttributedStringKey.font: self]).width
}
}