在Swift3中,我之前使用以下方法将Bool转换为Int
let _ = Int(NSNumber(value: false))
Run Code Online (Sandbox Code Playgroud)
转换为Swift4后,我得到了一个"'init'被弃用"警告.怎么办呢?
Ima*_*tit 21
使用Swift 4.2,根据您的需要,您可以选择以下5种解决方案中的一种来解决您的问题.
NSNumber的intValue财产import Foundation
let integer = NSNumber(value: false).intValue
print(integer) // prints 0
Run Code Online (Sandbox Code Playgroud)
import Foundation
let integer = NSNumber(value: false) as? Int
print(String(describing: integer)) // prints Optional(0)
Run Code Online (Sandbox Code Playgroud)
Int的init(exactly:)初始化程序import Foundation
let integer = Int(exactly: NSNumber(value: false))
print(String(describing: integer)) // prints Optional(0)
Run Code Online (Sandbox Code Playgroud)
作为上一代码的替代方法,您可以使用下面更简洁的代码.
import Foundation
let integer = Int(exactly: false)
print(String(describing: integer)) // prints Optional(0)
Run Code Online (Sandbox Code Playgroud)
Int的init(truncating:)初始化程序import Foundation
let integer = Int(truncating: false)
print(integer) // prints 0
Run Code Online (Sandbox Code Playgroud)
请注意,以下代码不需要导入Foundation.
用法#1(if语句):
let integer: Int
let bool = false
if bool {
integer = 1
} else {
integer = 0
}
print(integer) // prints 0
Run Code Online (Sandbox Code Playgroud)
用法#2(三元运算符):
let integer = false ? 1 : 0
print(integer) // prints 0
Run Code Online (Sandbox Code Playgroud)
您可以使用NSNumber属性intValue:
let x = NSNumber(value: false).intValue
Run Code Online (Sandbox Code Playgroud)
您还可以使用init?(exactly number: NSNumber)初始化程序:
let y = Int(exactly: NSNumber(value: false))
Run Code Online (Sandbox Code Playgroud)
或@Hamish在评论中提到的,数字初始值设定项已重命名为 init(truncating:)
let z = Int(truncating: NSNumber(value: false))
Run Code Online (Sandbox Code Playgroud)
或让Xcode如@MartinR所述从中隐式创建一个NSNumber
let z = Int(truncating: false)
Run Code Online (Sandbox Code Playgroud)
您还有另一个选择是扩展协议BinaryInteger(Swift 4)或Integer(Swift3),并创建自己的不可靠初始化器,该初始化器以Bool作为参数,并使用三元运算符返回原始类型,如@vadian的注释所示:
extension BinaryInteger {
init(_ bool: Bool) {
self = bool ? 1 : 0
}
}
Run Code Online (Sandbox Code Playgroud)
let a = Int(true) // 1
let b = Int(false) // 0
let c = UInt8(true) // 1
let d = UInt8(false) // 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5652 次 |
| 最近记录: |