在Swift 2.x中,我相信我能做到:
let number = 1
let result = Bool(number)
print(result) // prints out: true
但是自从Swift 3以来我一直无法做到这一点,它给了我错误:
无法使用参数列表调用类型为“Bool”的初始化器 输入'(Int)'
目前我正在使用扩展程序将Int
转换为Bool
,但我想知道是否没有内置选项来执行此操作。
答案 0 :(得分:44)
不,从来没有明确的内置选项将Int
转换为Bool
,请参阅the language reference for Bool
for details。
然而,仍存在initializer by NSNumber
。不同之处在于,在Swift 3中删除了Swift数字类型和NSNumber
之间的隐式桥接(之前通过Bool
初始化允许看似明确的Int
)。您仍然可以通过明确执行从NSNumber
到Int
的转换,通过NSNumber
初始化工具访问此内容:
let number = 1
let result = Bool(number as NSNumber)
print(result) // true
正如@Hamish在下面的评论中写道:如果我们留下初始化者的主题并且只关注最终结果(在给定Bool
实例的值的情况下实例化Int
实例)我们可以简单地对!=
值使用Int
运算符(特别是带有签名func !=(lhs: Int, rhs: Int) -> Bool
的运算符),使用!=
运算符方法可以轻松实现泛化:
let number = -1
let result = number != 0
print(result) // true
就像你自己和@JAL describes in his answer一样,你可以通过Bool
初始化程序构建自己的Int
,但是你也可以考虑对符合{{{{}}的任何类型进行推广。 3}}:
extension Bool {
init<T: Integer>(_ num: T) {
self.init(num != 0)
}
}
/* example usage */
let num1: Int8 = -1
let num2: Int = 3
let num3: UInt64 = 0
// ....
let result1 = Bool(num1) // true
let result2 = Bool(num2) // true
let result3 = Bool(num3) // false
答案 1 :(得分:18)
extension Int {
var boolValue: Bool { return self != 0 }
}
extension Integer {
var boolValue: Bool { return self != 0 }
}
let number = 2
print(number.boolValue)
let items = ["1"]
print(items.count.boolValue)
答案 2 :(得分:6)
没有布尔初始值设定项只需Int
NSNumber
。以前,Int
通过基金会隐式桥接到NSNumber
,但在Swift 3中已删除。
您可以执行以下操作:
let result = Bool(number as NSNumber)
或者,您可以扩展Bool
并创建一个带有Int:
extension Bool {
init(_ number: Int) {
self.init(number as NSNumber)
}
}
答案 3 :(得分:4)
我正在使用Xcode 9.0.1和Swift 3.0。
let result = (number as NSNumber).boolValue
这对我来说非常好。
答案 4 :(得分:0)
let iFalse: Int = 0
let iTrue: Int = 1
let iNil: Int = 2 //or any number other than 0 & 1
Bool(exactly: iFalse as NSNumber) //false
Bool(exactly: iTrue as NSNumber) //true
Bool(exactly: iNil as NSNumber) //nil
答案 5 :(得分:0)
迅速5 尝试
extension Int32 {
var boolValue: Bool {
return (self as NSNumber).boolValue
}
}
或
extension Int32 {
var boolValue: Bool {
return Bool.init(truncating: NSNumber.init(value: self))
}
}
答案 6 :(得分:0)
快捷键5
let number = 1
let result = Bool(truncating: number as NSNumber) //here result will be false if the number's value is 0 and it will be true for any other number's value
print(result)