【问题标题】:Swift date(byAdding:to:) returns nil for trivial calculation in REPLSwift date(byAdding:to:) 为 REPL 中的简单计算返回 nil
【发布时间】:2020-06-12 23:54:38
【问题描述】:

我希望这会返回一个 Date 对象,表示从现在开始一小时后的时间:

Calendar.current.date(byAdding: DateComponents(hour: 1), to: Date()) 

但是它返回nil。这似乎是对 API 的一种相当直接的使用,所以也许我对这个 API 应该如何工作有一些基本的误解?

似乎会影响 Xcode 中包含的 swift 命令行 REPL(macOS Catalina 10.15.3 上的版本 11.3.1)。

有趣的是,将上述代码包装在 print() 调用中会强制它打印正确的结果。那么为什么显示nil

Apple Swift version 5.1.3 (swiftlang-1100.0.282.1 clang-1100.0.33.15)
Target: x86_64-apple-darwin19.3.0

【问题讨论】:

    标签: swift date read-eval-print-loop


    【解决方案1】:

    这是 Swift REPL 中的一个错误,请参阅

    它影响一些 Swift 覆盖类型的可选和非可选值(例如DateCalendarURL)。示例:

    $ 迅速 欢迎使用 Apple Swift 5.1.3 版 (swiftlang-1100.0.282.1 clang-1100.0.33.15)。 输入 :help 寻求帮助。 1> 导入基础 2> 3> 让 d1 = 日期() d1:日期 = {} 4> 让d2:日期? = 日期() d2:日期? = 无 5> 让 url = URL(字符串:“https://www.google.com”) 网址:网址? = 无

    作为一种解决方法,您可以打印这些值:

    7> 打印(d1) 2020-03-03 10:17:00 +0000 8>打印(d2) 可选(2020-03-03 10:17:07 +0000) 9> 打印(网址) 可选(https://www.google.com)

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多