你如何在Swift 4中获得文本长度?

时间:2017-06-27 13:01:55

标签: uifont swift4

我不确定如何更新此代码:

func textWidth(text: String, font: UIFont?) -> CGFloat
{
    let attributes = font?.fontDescriptor.fontAttributes
    return text.size(withAttributes: attributes).width
}
斯威夫特4抱怨: 无法转换类型' [UIFontDescriptor.AttributeName:Any]的值?'预期的参数类型' [NSAttributedStringKey:Any]?'

我不知道他们为什么打破这个,但它不会自动修复。

3 个答案:

答案 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
    }

}