当我从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)
}
这是我的错误:
无法将“字符串”类型的值转换为预期参数类型“ NSAttributedStringKey”
有什么建议吗?我是iOS的新手,所以请更加精确。
答案 0 :(得分:0)
您需要删除对.rawValue
键的使用.paragraphStyle
。
还要注意,对于Swift 4.2(或更高版本),您需要将NSAttributedStringKey
的所有使用替换为NSAttributedString.Key
。
DBL_MAX
已过时。使用.greatestFiniteMagnitude
代替CGFloat(DBL_MAX)
。
如果传入lineBreakMode
,则强制展开可选的nil
参数将导致您的应用程序崩溃。