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
}
我已经被这个问题困了一段时间了,这个主题的类似问题并没有帮助我解决这个问题。
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
}