Swift date(byAdding:to:) 对于 REPL 中的简单计算返回 nil

rgo*_*gov 5 date read-eval-print-loop swift

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

Calendar.current.date(byAdding: DateComponents(hour: 1), to: Date()) 
Run Code Online (Sandbox Code Playgroud)

然而它又回来了nil。这似乎是 API 的相当简单的使用,所以也许我对这个 API 应该如何工作有一些基本的误解?

这似乎影响swiftXcode 附带的命令行 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
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 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)