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

How do you get text length in Swift 4?

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

func textWidth(text: String, font: UIFont?) -> CGFloat
{
    let attributes = font?.fontDescriptor.fontAttributes
    return text.size(withAttributes: attributes).width
}

Swift4人投诉: 无法转换类型“[UIFontDescriptor.AttributeName : Any] 的值?”到预期的参数类型 '[NSAttributedStringKey : Any]?'

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

我猜,你想写这样的东西:

(Swift 4)

func textWidth(text: String, font: UIFont?) -> CGFloat {
    let attributes = font != nil ? [NSAttributedStringKey.font: font!] : [:]
    return text.size(withAttributes: attributes).width
}

(Swift 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:))的有效输入,即使类型匹配也是如此。

在 Swift 4 中执行此操作的替代方法是这样的:

  extension UIFont { 


    func textWidth(s: String) -> CGFloat
    {
        return s.size(withAttributes: [NSAttributedStringKey.font: self]).width
    }

}

(SWIFT 4 已更新)

func textWidth(text: String, font: UIFont?) -> CGFloat {
    let attributes = font != nil ? [NSFontAttributeName: font] : [:]
    return text.size(withAttributes: attributes).width
}

希望对您有所帮助。