字符串到双精度和前导空格

时间:2019-07-15 15:21:32

标签: swift string standard-library

我在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()及其亲戚应该能够在内部处理前导和尾随空格。

1 个答案:

答案 0 :(得分:2)

这已被完全记录。查看使用StringProtocol的{​​{3}}方法的文档。

在所有示例的结尾附近,它指出:

  

text的形式传递任何其他格式或任何其他字符将导致nil。例如,以下转换将产生nil

Double(" 5.0")      // Includes whitespace

因此,在转换前修剪空白的解决方案是正确的。