关于NumberFormatter.string返回nil的场景技术问询
NumberFormatter.string(from:) 返回nil的场景解析
我来帮你梳理下NumberFormatter.string(from:)返回nil的几种常见场景,结合官方文档说明和实际开发中的情况:
传入特殊数值类型:当你传入的是无穷大(
Double.infinity)、负无穷(-Double.infinity)或者非数值(Double.nan)这类特殊值时,格式化器无法将它们转换成符合要求的货币字符串,会直接返回nil。比如:let nf = NumberFormatter() nf.numberStyle = .currency nf.currencyCode = "USD" let invalidVal = Double.nan let result = nf.string(from: invalidVal as NSNumber) // 返回nil格式化配置无效或冲突:如果你的格式化器配置存在问题,也会导致返回
nil。最典型的就是设置了无效的ISO 4217货币代码(比如不存在的"XYZ"),或者当numberStyle设为.currency时,没有正确配置货币相关参数(虽然系统有时会做降级处理,但极端情况依然会返回nil)。另外,如果你设置了一些逻辑冲突的格式参数(比如minimumIntegerDigits远大于数值本身的整数位数,且没有补零规则支持),也可能触发这种情况:let nf = NumberFormatter() nf.numberStyle = .currency nf.currencyCode = "XYZ" // 无效货币代码 let myVal = 100.23 let result = nf.string(from: myVal as NSNumber) // 返回nil数值超出格式器处理范围:当传入的数值极端大或极端小,超出了当前格式化器能处理的有效范围时,也会返回
nil。比如一个精度极高、远超常规数值表示范围的数,格式化器无法将其转换成合法的字符串格式。
简单来说,只要格式化器无法根据当前配置生成一个有效的、符合要求的字符串表示,就会返回nil。
内容的提问来源于stack exchange,提问作者Anthony Dito
相关产品推荐
相关产品推荐

