如何修复 'Int' 在仅使用 Int 的比较中不能转换为 'String'?

How to fix 'Int' is not convertible to 'String' in a comparison that uses only Int?

想象一下我很惊讶这个 Swift 代码在 Xcode 6.1.1 中生成错误:

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

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

'Int' is not convertible to 'String'

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

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

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

Could not find an overload for '<' that accepts the supplied arguments

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

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

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

'Int' is not convertible to 'String'

Gnnnnn.... 哦,好的,所以我再试一次没有括号:

return highest < highestUnlockedLevel

这又给了我一条错误信息:

Cannot invoke '<' with an argument list of type '(@lvalue Int, @lvalue Int)'

好的,我明白了Swift,我很愚蠢。或者也许......嗯,接受这个,Swift:

var result = highest < highestUnlockedLevel
return result

啊……不。 Swift 决定现在 return 行构成另一个错误:

'Bool' is not convertible to 'Int'

(...拨打电话进行心理评估...)


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

注意: 如果有任何区别,这是在一个混合的 Objc/Swift 项目中。 highestUnlockedLevel 变量在 Swift class 中使用自定义 setter 和 getter.

声明

(highest < highestUnlockedLevel) 生成 Bool 而不是 Int(不像 Objective-C,其中 returns int 可以自动转换为 BOOL), 这就是你得到错误的原因。但肯定是错误和误导性错误,因为问题是 Bool 无法转换为 Int.