Zap*_*hod 29 migration type-conversion ios swift swift3
我正在将一个项目从Swift 2.2迁移到Swift 3,我试图在可能的情况下摆脱旧的Cocoa数据类型.
我的问题在这里:迁移NSDecimalNumber
到Decimal
.
我用来桥接NSDecimalNumber
以Double
这两种方式雨燕2.2:
let double = 3.14
let decimalNumber = NSDecimalNumber(value: double)
let doubleFromDecimal = decimalNumber.doubleValue
Run Code Online (Sandbox Code Playgroud)
现在,切换到Swift 3:
let double = 3.14
let decimal = Decimal(double)
let doubleFromDecimal = ???
Run Code Online (Sandbox Code Playgroud)
decimal.doubleValue
不存在,Double(decimal)
甚至不存在decimal as Double
......我想出的唯一一个黑客是:
let doubleFromDecimal = (decimal as NSDecimalNumber).doubleValue
Run Code Online (Sandbox Code Playgroud)
但是试图摆脱NSDecimalNumber
它并且必须偶尔使用它将是完全愚蠢的......
好吧,要么我错过了一些明显的东西,请原谅浪费你的时间,或者在我看来需要解决一个漏洞......
在此先感谢您的帮助.
编辑:在Swift 4上没有关于这个主题的更多信息.
rma*_*ddy 14
在Swift 3中工作的另一个解决方案是Decimal
转换NSNumber
并创建Double
它.
let someDouble = Double(someDecimal as NSNumber)
Run Code Online (Sandbox Code Playgroud)
ske*_*ech 10
NSDecimalNumber
并且Decimal
是桥接的
Swift覆盖到Foundation框架提供了Decimal结构,该结构桥接到NSDecimalNumber类.Decimal值类型提供与NSDecimalNumber引用类型相同的功能,并且这两者可以在与Objective-C API交互的Swift代码中互换使用.此行为类似于Swift如何将标准字符串,数字和集合类型桥接到其对应的Foundation类.Apple Docs
但与其他一些桥接类型一样,缺少某些元素.
要重新获得功能,您可以编写扩展程序:
extension Decimal {
var doubleValue:Double {
return NSDecimalNumber(decimal:self).doubleValue
}
}
// implementation
let d = Decimal(floatLiteral: 10.65)
d.doubleValue
Run Code Online (Sandbox Code Playgroud)
在Swift 4中有效的解决方案
let double = 3.14
let decimal = Decimal(double)
let doubleFromDecimal = NSDecimalNumber(decimal: decimal).doubleValue
print(doubleFromDecimal)
Run Code Online (Sandbox Code Playgroud)
编辑:无NSDecimalNumber
/NSNumber
let double = 3.14
let decimal = Decimal(double)
if let doubleFromDecimal = Double(decimal.description){
print(doubleFromDecimal)
}
Run Code Online (Sandbox Code Playgroud)
let doubleValue = Double(truncating: decimalValue as NSNumber)
Run Code Online (Sandbox Code Playgroud)
Decimal
在 Swift 3 中不是NSDecimalNumber
. 这是NSDecimal
完全不同的类型。
NSDecimalNumber
您应该像以前一样继续使用。
归档时间: |
|
查看次数: |
23036 次 |
最近记录: |