将 Int 转换为 Bool

问题描述 投票:0回答:8

在 Swift 2.x 中我相信我可以做到:

let number = 1
let result = Bool(number)

print(result) // prints out: true

但自 Swift 3 以来,我一直无法执行此操作,并且它给了我错误:

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

目前我正在使用扩展将

Int
转换为
Bool
但我想知道是否没有内置选项可以执行此操作。

swift int boolean swift3
8个回答
64
投票

不,有且从未有过用于将

Int
转换为
Bool
的显式内置选项,请参阅
Bool
的语言参考了解详细信息

然而,仍然存在 NSNumber

 初始化器。不同之处在于,Swift 数字类型和 
NSNumber
之间的隐式桥接已在 Swift 3 中删除(之前允许通过
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 在他的回答中描述的那样,您可以通过

Bool
初始化器构造自己的
Int
,但您也可以考虑将其推广到符合
Integer
协议的任何类型

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

33
投票

斯威夫特4

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

斯威夫特3

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

使用方法

let number = 2
print(number.boolValue)

let items = ["1"]
print(items.count.boolValue)

6
投票

没有布尔初始值设定项需要

Int
,只有
NSNumber
。之前,
Int
通过 Foundation 隐式桥接到
NSNumber
,但在 Swift 3 中已被删除。

你可以这样做:

let result = Bool(number as NSNumber)

或者,您可以扩展

Bool
并创建一个采用 Int 的自定义 init:

extension Bool {    
    init(_ number: Int) {
        self.init(number as NSNumber)
    }
}

6
投票

我使用的是 Xcode 9.0.1 和 Swift 3.0。

let result = (number as NSNumber).boolValue

这对我来说非常有效。


5
投票

斯威夫特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)

1
投票
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

0
投票

Swift 5试试这个

extension Int32 {
    var boolValue: Bool {
        return (self as NSNumber).boolValue
    }
}

extension Int32 {
    var boolValue: Bool {
        return Bool.init(truncating: NSNumber.init(value: self))
    }
}

0
投票

类似这样的事情。检查条件是否成立并返回

let result = number == 1 ? true : false
© www.soinside.com 2019 - 2024. All rights reserved.