String to Double 和前导空格

String to Double and leading whitespace

我在 Swift 标准库结构 Double() 中发现了奇怪的行为。此函数将表示数字的字符串转换为双精度数字。一切都很好。

我最近发现了前导白色 space 的奇怪行为,即如果单个空白字符 space 导致有效数字字符串,则转换失败:

示例(Xcode 调试器)

(lldb) po Double("11.8000")
▿ Optional<Double>
  - some : 11.8

(lldb) po Double(" 11.8000")
nil

我还没有看到这个文档,所以我 post 在这里。 不雅的修复是:

let myNumber = Double(myString.trimmingCharacters(in: .whitespaces))

有更好的解决办法吗?我的意思是除了用 trim() 替换 trimmingCharacters(in: .whitespaces) 的简单字符串扩展。我认为 Double() 及其亲属应该能够在内部处理前导和尾随 spaces.

这已被完整记录。查看采用 StringProtocol.

init 方法的文档

在所有示例的末尾,它指出:

Passing any other format or any additional characters as text results in nil. For example, the following conversions result in nil:

Double(" 5.0")      // Includes whitespace

所以您对 trim 转换前空格的解决方案是正确的。