如何在Swift中将可选decimal类型转换为String

rbl8hiat  于 11个月前  发布在  Swift
关注(0)|答案(2)|浏览(170)

我有一个变量作为可选的十进制类型,并希望转换为另一个String类型的变量,如果它是nil,更改为空字符串"",否则转换为字符串值。然而,我得到错误错误:Binary operator '??' cannot be applied to operands of type 'Decimal?' and 'String'

let iAmNil: Decimal? = nil
let iAmDecimal: Decimal? = 12.34
print(String(describing: iAmDecimal ?? ""))

字符串

waxmsbnn

waxmsbnn1#

如错误所示,您在错误的级别上应用了??。您试图为可选的Decimal提供字符串默认值("")。这不起作用。
您需要的是有条件地将Decimal?转换为String?,然后为 that 提供默认值。
最简单的方法是使用Optional.map(_:)

import Foundation

let iAmNil: Decimal? = nil
let iAmDecimal: Decimal? = 12.34

print(iAmNil.map { String(describing: $0) } ?? "nil")
print(iAmDecimal.map { String(describing: $0) } ?? "nil")

字符串
(我使用"nil"而不是""来显示它实际上在输出中工作)
当然,你永远不应该使用String(describing:)来格式化数字,确保你使用的是像NumberFormatter这样的语言环境感知工具,它实际上可以正确地完成这些任务。

suzh9iv8

suzh9iv82#

如果你将转换为Any,那么这将工作,因为编译器很高兴可以使用DecimalString

import Foundation

let iAmNil: Decimal? = nil
let iAmDecimal: Decimal? = 12.34
print(String(describing: (iAmDecimal ?? "") as Any))
// Prints 12.34\n

字符串

相关问题