将Int转换为Bool

时间:2016-10-15 14:15:49

标签: swift int boolean swift3

在Swift 2.x中,我相信我能做到:

let number = 1
let result = Bool(number)

print(result) // prints out: true

但是自从Swift 3以来我一直无法做到这一点,它给了我错误:

  

无法使用参数列表调用类型为“Bool”的初始化器   输入'(Int)'

目前我正在使用扩展程序将Int转换为Bool,但我想知道是否没有内置选项来执行此操作。

7 个答案:

答案 0 :(得分:44)

不,从来没有明确的内置选项将Int转换为Bool,请参阅the language reference for Bool for details

然而,仍存在initializer by NSNumber。不同之处在于,在Swift 3中删除了Swift数字类型和NSNumber之间的隐式桥接(之前通过Bool初始化允许看似明确的Int)。您仍然可以通过明确执行从NSNumberInt的转换,通过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)

Swift 4

extension Int {
    var boolValue: Bool { return self != 0 }
}

Swift 3

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:

的自定义init
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)