Swift 错误 - 表达式类型不明确,没有更多上下文

Swift Error - Type of expression is ambiguous without more context

我已经被这个问题困了一段时间了,这个主题的类似问题并没有帮助我解决这个问题。

public extension NSString {
    func textRectWithFont(font: UIFont, width: CGFloat) -> CGRect {
        let contraint: CGSize = CGSize(width: width, height: 500000);
        var rect: CGRect

        var attributes: [NSAttributedString.Key: Any] = [
            .font: font
        ]

        rect = self.boundingRect(with: contraint,
                options: [.usesLineFragmentOrigin, .usesFontLeading],
                attributes: attributes,
                context: nil)

        return rect;
    }
}

当我在这一行使用那个方法时

let textHeight = NSString(textLabel?.text).textRectWithFont(font: textLabel?.font, width: textFrame?.size.width).size.height

它给我错误“表达式类型不明确,没有更多上下文”

我做错了什么?

您为函数提供的可选参数确实不明确。 最好的解决办法是像这样在通过之前解包。

if let input_textLabel = textLabel?.font, let input_Width = textFrame?.size.width {
let textHeight = NSString(textLabel?.text).textRectWithFont(font: input_textLabel, width: input_Width).size.height
}

或者您也可以将可选参数带入函数,然后在内部解包并对其进行处理。

func textRectWithFont(font: UIFont?, width: CGFloat?) -> CGRect {
if let font  = font , let width = width. { your rest of function}

return value
}