【问题标题】:String to Double and leading whitespace字符串到 Double 和前导空格
【发布时间】:2019-11-24 08:03:11
【问题描述】:

我在 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))

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

【问题讨论】:

    标签: swift string standard-library


    【解决方案1】:

    这是完整的文档。查看采用StringProtocolinit 方法的文档。

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

    将任何其他格式或任何附加字符作为text 传递会导致nil。例如,以下转换导致nil

    Double(" 5.0")      // Includes whitespace
    

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

    【讨论】:

    • 感谢 rmaddy,我查看了 Double 的标准库条目,并在网上搜索了一下。我没有看init方法。我的错。
    • 不要强调关于修剪字符串的观点,(至少)对我来说似乎是合理的,修剪可能是内部的。外部空格与数字字符中的随机标点符号和字母字符相去甚远。只是看起来很hacky。但再次感谢您的回复。
    猜你喜欢
    • 2017-06-28
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多