如何修复 '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
.
想象一下我很惊讶这个 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
.