【问题标题】:Swift Cannot invoke '+' with an argument list of type '($T10, CGFloat)'Swift 无法使用类型为“($T10,CGFloat)”的参数列表调用“+”
【发布时间】:2015-03-26 21:08:03
【问题描述】:

我是 Swift 的初学者。

我有这个错误

不能使用“($T10, CGFloat)”类型的参数列表调用“+”

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


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

return UIImage(named: imageName)!

}

【问题讨论】:

    标签: swift cgfloat


    【解决方案1】:

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

    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 在调用该方法并从帧/边界获取值时可能会很方便,但它很可能会在将来咬你(例如具有几乎“完美”宽度的框架,例如120.001 - 或任何来自部门的疯狂数字)。因此,我相信 Ints 在这种情况下会更好地服务,以保持大小/文件名之间的(相对安全的)映射。

    附言。在您的情况下,let 也可能比var 更可取,因为imageName 只是构造并返回而无需进一步修改,最后UIImage? 作为返回类型将迫使您处理(或至少首先检查) 任何无法找到图像的情况,从而使您的代码更安全。

    【讨论】:

    • 很好的答案,但我会问 OP 是否真的意味着它们是 CGFloats - 我怀疑它,但如果他这样做,我们需要知道他想要使用的精度,因为我们无法控制插值.如果不是,很可能,他在他真正意味着 Ints 的地方通过 CGFloats 是完全错误的。斯威夫特试图抛弃我们的正是那种草率的想法……
    • @Grimxn 我完全同意你的看法。我试图小心我的回答,只关注问题而不是关于代码质量的一般建议(当然,做出可能超出范围的假设)。话虽如此,我将编辑答案,因为它也困扰着我。感谢您的反馈:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多