【问题标题】:How to fix 'Int' is not convertible to 'String' in a comparison that uses only Int?在仅使用 Int 的比较中,如何修复“Int”不能转换为“String”?
【发布时间】:2015-03-21 04:48:30
【问题描述】:

想象一下,这段 Swift 代码在 Xcode 6.1.1 中生成了一个错误,这让我感到惊讶:

public func unlockNextLevel() -> Int
{
    var highest : Int = 123
    return (highest < highestUnlockedLevel)
}

更准确地说,它告诉我在返回行中:

'Int' 不能转换为 'String'

所以,由于我之前遇到过一些奇怪的转换错误,我想我会尝试将这两种类型都转换为 Int 并看看我得到了什么:

public func unlockNextLevel() -> Int
{
    var highest : Int = 123
    return (Int(highest) < Int(highestUnlockedLevel))
}

然后我在返回行收到以下错误:

找不到接受所提供参数的“

但是当我将其分解为常量值时:

return (Int(3) < Int(12))

我再次收到 int not convertible to string 错误。

'Int' 不能转换为 'String'

Gnnnnn.... 哦,好吧,所以我再试一次,不带括号:

return highest < highestUnlockedLevel

这又给了我另一个错误消息:

不能使用类型为“(@lvalue Int, @lvalue Int)”的参数列表调用“

好的,我明白了,斯威夫特,我很笨。或者也许......嗯,拿着这个,斯威夫特:

var result = highest < highestUnlockedLevel
return result

Arrrr ...不。 Swift 决定现在返回行构成另一个错误:

'Bool' 不能转换为 'Int'

(...拨打心理评估号码...)


所以...有人可以向我解释一下吗:

  • 如何解决或解决此问题?
  • 当然还有:为什么?哦,为什么???

注意:这是在混合的 Objc/Swift 项目中,如果这有什么不同的话。 highestUnlockedLevel 变量在带有自定义 setter 和 getter 的 Swift 类中声明。

【问题讨论】:

  • 'Bool' is not convertible to 'Int' 实际上清楚地描述了问题:)
  • 该死的......我是盲人:D

标签: swift compiler-errors type-conversion


【解决方案1】:

(highest &lt; highestUnlockedLevel) 产生Bool 而不是Int(与Objective-C 不同,它返回int 可以自动转换为BOOL),这就是你得到错误的原因。但肯定是它的错误和误导性错误,因为问题是Bool 不能转换为Int

【讨论】:

  • 我现在才意识到。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2018-02-28
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多