当我从Swift 3转换为Swift 4时,我在“NSAttributedStringKey”上遇到了一些错误。
这是我的代码:
func height(_ width: CGFloat, font: UIFont, lineBreakMode: NSLineBreakMode?) -> CGFloat {
var attrib: [NSAttributedStringKey: Any] = [.font: font]
if lineBreakMode != nil {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineBreakMode = lineBreakMode!
attrib.updateValue(paragraphStyle, forKey: NSAttributedStringKey.paragraphStyle.rawValue)
}
let size = CGSize(width: width, height: CGFloat(DBL_MAX))
return ceil((self as NSString).boundingRect(with: size, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes:attrib, context: nil).height)
}
这是我的错误:
无法将'String'类型的值转换为预期的参数类型'NSAttributedStringKey'
有什么建议吗?我是iOS的新手,所以请更精确。
您需要删除使用.rawValue
作为.paragraphStyle
密钥。
另请注意,对于Swift 4.2(或更高版本),您需要将NSAttributedStringKey
替换为NSAttributedString.Key
。
DBL_MAX
已被弃用。使用.greatestFiniteMagnitude
而不是CGFloat(DBL_MAX)
。
强制解包可选的lineBreakMode
参数会导致您的应用程序在传入nil
时崩溃。