【问题标题】:Binary operator + cannot be applied to two int operands二元运算符 + 不能应用于两个 int 操作数
【发布时间】:2015-05-20 12:27:41
【问题描述】:

您好,我对此代码有疑问:

1)

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

2)

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

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

【问题讨论】:

  • 另请参阅this question 的答案。本质上,如果 A 已经声明为 CGFloat 的 Double 或其他类型,并且 B 和 C 是整数,则 A = B + C 将失败并显示此错误消息,这掩盖了真正的问题和解决方案: A = Double(B+C) .这个问题/答案在谷歌搜索这个错误的顶部;在某些情况下,其他问题的答案可能更有帮助。

标签: swift sum operands


【解决方案1】:

1) 第一个代码有效,因为String 有一个采用Int 的init 方法。然后就行了

let widthLabel = label + String(width)

您正在使用+ 运算符连接字符串以创建widthLabel。

2) Swift 错误消息可能会产生误导,实际问题是Int 没有采用String 的init 方法。在这种情况下,您可以在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。
  • 不,首先,这不是在 Swift 中进行强制转换的语法(您可以使用as 的形式,请参阅developer.apple.com/library/ios/documentation/Swift/Conceptual/…)。其次,Swift 错误消息有一种误导性的习惯,实际的问题是Int 上没有一个init 接受String。
  • 很好的解释!非常感谢!
  • 我已经用您的第一个示例更新了我的答案。如果任一答案解决了您的问题,您会考虑将其中一个标记为正确吗?
  • 完成。抱歉 - 我没有早点这样做...我得找个借口说我还是新手 :)
【解决方案2】:

你需要的是这个:

let height = "3"
let number = 4
let heightNumber = number + height.toInt()!

如果您想从String 中获取Int,请使用toInt()。

【讨论】:

  • 是的,我知道。但即使根据错误描述,能够执行该操作也是有意义的。它以某种方式将高度转换为 Int。我想知道为什么会这样。
  • 那是因为您想用不允许的 String 初始化 Int。您只能使用整数初始化 Int。例如 - let a = Int(25).
猜你喜欢
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2015-09-01
  • 2017-11-22
相关资源
最近更新 更多