Swift中如何将可选Decimal类型转为String?解决类型不匹配报错
解决可选Decimal转String的类型不匹配问题
报错核心原因:??(nil合并运算符)要求左右两侧类型必须一致,但你的代码里左侧是Decimal?,右侧是String,类型不兼容,导致编译器报错。
下面是几种可行的解决写法:
- 方法1:利用
map处理可选值转换,再用nil合并运算符兜底
let iAmNil: Decimal? = nil let iAmDecimal: Decimal? = 12.34 let result = iAmDecimal.map { String(describing: $0) } ?? "" print(result) // 输出"12.34" print(iAmNil.map { String(describing: $0) } ?? "") // 输出""
map会自动解包可选值:如果是nil则返回nil,否则执行闭包里的转换得到String类型,此时??两侧都是String?和String,类型匹配。
- 方法2:用if-else直接判断
func decimalToString(_ decimal: Decimal?) -> String { if let value = decimal { return String(describing: value) } return "" } print(decimalToString(iAmDecimal)) // 输出"12.34" print(decimalToString(iAmNil)) // 输出""
- 方法3:给可选Decimal添加扩展,方便复用
extension Optional where Wrapped == Decimal { var stringValue: String { guard let value = self else { return "" } return String(describing: value) } } print(iAmDecimal.stringValue) // 输出"12.34" print(iAmNil.stringValue) // 输出""
内容的提问来源于stack exchange,提问作者jacobcan118
相关产品推荐
相关产品推荐

