两个整数操作数不能应用二元运算符+

18

嗨,我对这段代码有一个问题:

1)

let label = "The width is "
let width = 94
let widthLabel = label + String(width)

2)

->

2)

let height = "3"
let number = 4
let hieghtNumber = number + Int(height)

第一部分运行得很好,但我不明白第二部分为什么不行。我收到了错误消息:“二进制运算符“+”不能应用于两个int操作数”,这对我来说没有太多意义。有人可以帮我解释一下吗?


请参阅此问题的答案。如果A已经声明为Double或CGFloat等类型,而B和C是整数,则A = B + C将失败并显示此错误消息,这会掩盖真正的问题和解决方案:A = Double(B+C)。该问题/答案在谷歌搜索中排名靠前;在某些情况下,其他问题的答案可能更有帮助。 - ConfusionTowers
2个回答

18

1) 第一段代码可以工作是因为 String 有一个接受 Int 的初始化方法。然后在该行上

let widthLabel = label + String(width)

你正在使用加号运算符将字符串拼接在一起,以创建widthLabel

2) Swift错误消息可能会让人产生误解,实际问题是Int没有接受Stringinit方法。在这种情况下,您可以使用String上的toInt方法。以下是一个示例:

if let h = height.toInt() {
    let heightNumber = number + h
}

您应该使用if let语句检查String是否可以转换为Int,因为如果失败,toInt将返回nil;在这种情况下强制解包会导致应用程序崩溃。请参见以下示例,说明如果height无法转换为Int时会发生什么:

let height = "not a number"

if let h = height.toInt() {
    println(number + h)
} else {
    println("Height wasn't a number")
}

// Prints: Height wasn't a number

Swift 2.0 更新:

Int 现在有一个可以接受 String 参数的初始化方法,这使得示例2(见上文)变得更加简洁:

if let h = Int(height) {
    let heightNumber = number + h
}

在任何情况下使用(Int)someString有意义吗?我只是被错误描述搞糊涂了,操作数是Int,这意味着高度被强制转换为Int。 - Neli Chakarova
1
不是的,首先,这不是Swift中强制转换语法的正确写法(你需要使用as表单,请参考https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html)。其次,Swift错误信息常常很具有误导性,实际的问题在于`Int`上没有一个接受`String`类型参数的`init`函数。 - ABakerSmith
非常好的解释!非常感谢你! - Neli Chakarova
我已经更新了我的回答,并加上了关于你的第一个示例的一些内容。如果这些回答中有任何一个解决了你的问题,你会考虑将其标记为正确吗? - ABakerSmith
抱歉 - 我之前没有做好...我得找个借口说我还是新手 :) - Neli Chakarova

0
你需要的是这个:
let height = "3"
let number = 4
let heightNumber = number + height.toInt()!

如果你想从一个字符串中获取一个整数(Int),你可以使用 toInt() 函数。

是的,我知道。但即使根据错误描述,执行该操作也是有意义的。它在某种程度上将高度转换为Int。我想知道为什么会这样。 - Neli Chakarova
这是因为您想用一个String初始化一个Int,这是不允许的。您只能使用整数来初始化Int。例如 - let a = Int(25) - Vasil Garov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接