Swift 无法使用类型为“($T10, CGFloat)”的参数列表调用“+”

Swift Cannot invoke '+' with an argument list of type '($T10, CGFloat)'

我是 Swift 的初学者。

我有这个错误

无法使用类型为“($T10, CGFloat)”的参数列表调用“+”

func loadBackground(key: NSString, width:CGFloat, height:CGFloat) -> UIImage!{


var imageName = key  + "_" + width + "_" + height

return UIImage(named: imageName)!

}

该错误表明您正在尝试连接一个字符串和一个浮点数(或者无论如何,无法通过 + 连接的不同类型)。您可以像这样插入和构造字符串:

func loadBackground(key: NSString, width:CGFloat, height:CGFloat) -> UIImage!{

    var imageName = "\(key)_\(width)_\(height)"

    return UIImage(named: imageName)!
}

你可以阅读more about this here

好的,在@Grimxn 的评论后再说几句...

首先,将 widthheight 指定为 CGFloats 在调用方法并从 frame/bounds 中获取值时可能会很方便,但它很可能会将来咬你(例如,考虑一个几乎 'perfect' 宽度的框架,如 120.001 - 或者任何来自一个部门的疯狂数字)。所以,我相信 Ints 在这种情况下会更好地服务,以便维护 sizes/filenames.

之间的(相对更安全的)映射

PS。此外,在您的情况下,let 可能比 var 更可取,因为 imageName 只是构建并且 returned 没有进一步修改,最后 UIImage? 作为 return 类型会强制您处理(或至少首先检查)无法找到图像的任何情况,从而使您的代码更安全。