Swift 4转换错误:无法将'String'类型的值转换为预期的参数类型'NSAttributedStringKey'

问题描述 投票:-1回答:1

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

swift swift4 nsattributedstring
1个回答
0
投票

您需要删除使用.rawValue作为.paragraphStyle密钥。

另请注意,对于Swift 4.2(或更高版本),您需要将NSAttributedStringKey替换为NSAttributedString.Key

DBL_MAX已被弃用。使用.greatestFiniteMagnitude而不是CGFloat(DBL_MAX)

强制解包可选的lineBreakMode参数会导致您的应用程序在传入nil时崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.