Swift 4转换错误:无法将“字符串”类型的值转换为预期的参数类型“ NSAttributedStringKey”

时间:2019-04-22 02:31:58

标签: swift swift4 nsattributedstring

当我从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的新手,所以请更加精确。

1 个答案:

答案 0 :(得分:0)

您需要删除对.rawValue键的使用.paragraphStyle

还要注意,对于Swift 4.2(或更高版本),您需要将NSAttributedStringKey的所有使用替换为NSAttributedString.Key

DBL_MAX已过时。使用.greatestFiniteMagnitude代替CGFloat(DBL_MAX)

如果传入lineBreakMode,则强制展开可选的nil参数将导致您的应用程序崩溃。