提问人:jacobcan118 提问时间:11/16/2023 更新时间:11/16/2023 访问量:55
如何在 swift 中将可选的十进制类型转换为字符串
how to convert optional decimal type to String in swift
问:
我有一个变量作为可选的十进制类型,如果它为零,我想转换为另一个类型变量,更改为空字符串,否则转换为字符串值。但是我收到错误
错误:String
""
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 ?? ""))
答:
2赞
Alexander
11/16/2023
#1
正如错误所表明的那样,您正在错误地应用您的级别。您正在尝试为可选的 Decimal 提供字符串 default ()。那行不通。??
""
您需要有条件地将 转换为 ,然后为其提供默认值。Decimal?
String?
最简单的方法是使用 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
评论
0赞
jacobcan118
11/16/2023
那么为什么有效呢?let iAmDecimal: Double? = 12.34 print(iAmDecimal ?? "")
1赞
trojanfoe
11/16/2023
@jacobcan118 因为接受作为其第一个参数。出于同样的原因,这也有效。print()
Any
let x: Any = iAmDecimal ?? ""
0赞
Alexander
11/17/2023
@jacobcan118 您的问题得到解答了吗?
0赞
trojanfoe
11/16/2023
#2
如果将转换转换为 ,那么这将起作用,因为编译器很高兴可以使用以下任一:Any
Decimal
String
import Foundation
let iAmNil: Decimal? = nil
let iAmDecimal: Decimal? = 12.34
print(String(describing: (iAmDecimal ?? "") as Any))
// Prints 12.34\n
评论
print(iAmDecimal?.formatted() ?? "")
Any