Hen*_*Lee 28 int boolean swift swift3
在Swift 2.x中我相信我能做到:
let number = 1
let result = Bool(number)
print(result) // prints out: true
Run Code Online (Sandbox Code Playgroud)
但是自从Swift 3以来我一直无法做到这一点并且它给了我错误:
无法使用类型'(Int)'的参数列表调用类型'Bool'的初始化程序
目前我正在使用扩展转换Int为a,Bool但我想知道是否没有构建选项来执行此操作.
dfr*_*fri 49
不,有从来没有明确的内置选项转换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
Run Code Online (Sandbox Code Playgroud)
正如@Hamish在下面的评论中写道:如果我们离开初始化者的主题并只关注最终结果(实例化一个Bool给定实例值的Int实例),我们可以简单地使用!=运算符来表示Int值(特别是运算符签名func !=(lhs: Int, rhs: Int) -> Bool),使用!=运算符方法可轻松实现的泛化:
let number = -1
let result = number != 0
print(result) // true
Run Code Online (Sandbox Code Playgroud)
就像你自己和@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
Run Code Online (Sandbox Code Playgroud)
lin*_*hen 20
extension Int {
var boolValue: Bool { return self != 0 }
}
Run Code Online (Sandbox Code Playgroud)
extension Integer {
var boolValue: Bool { return self != 0 }
}
Run Code Online (Sandbox Code Playgroud)
let number = 2
print(number.boolValue)
let items = ["1"]
print(items.count.boolValue)
Run Code Online (Sandbox Code Playgroud)
没有布尔初始值设定项Int仅使用NSNumber.以前,它通过Foundation Int隐式桥接NSNumber,但在Swift 3中删除了.
你可以这样做:
let result = Bool(number as NSNumber)
Run Code Online (Sandbox Code Playgroud)
或者,您可以扩展Bool并创建一个带有Int的自定义init:
extension Bool {
init(_ number: Int) {
self.init(number as NSNumber)
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Xcode 9.0.1和Swift 3.0。
let result = (number as NSNumber).boolValue
Run Code Online (Sandbox Code Playgroud)
这对我来说很好。
雨燕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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25725 次 |
| 最近记录: |