我在Swift标准库struct Double()中发现了奇怪的行为。此函数将代表数字的字符串转换为双精度数字。一切都很好。
我最近发现前导空格有奇怪的行为,即,如果单个空格字符前导有效数字字符串,则转换失败:
示例(Xcode调试器)
(lldb) po Double("11.8000")
▿ Optional<Double>
- some : 11.8
(lldb) po Double(" 11.8000")
nil
我没有看到这个文档,所以我在这里发布。 不太好的解决方法是:
let myNumber = Double(myString.trimmingCharacters(in: .whitespaces))
有更好的解决方案吗?我的意思是,除了用String()将trimmingCharacters(in.whitespaces)替换为trim()的简单字符串扩展之外。我认为Double()及其亲戚应该能够在内部处理前导和尾随空格。
答案 0 :(得分:2)
这已被完全记录。查看使用StringProtocol
的{{3}}方法的文档。
在所有示例的结尾附近,它指出:
以
text
的形式传递任何其他格式或任何其他字符将导致nil
。例如,以下转换将产生nil
:Double(" 5.0") // Includes whitespace
因此,在转换前修剪空白的解决方案是正确的。