Swift日期(通过添加:to:) returns nil for trivial calculation in REPL

标签 swift date read-eval-print-loop

我希望这会返回一个 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 REPL 中的一个错误,请参阅

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

$ swift
Welcome to Apple Swift version 5.1.3 (swiftlang-1100.0.282.1 clang-1100.0.33.15).
Type :help for assistance.
  1> import Foundation
  2>  
  3> let d1 = Date()
d1: Date = {}
  4> let d2: Date? = Date()
d2: Date? = nil
  5> let url = URL(string: "https://www.google.com")
url: URL? = nil

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

  7> print(d1)
2020-03-03 10:17:00 +0000
  8> print(d2)
Optional(2020-03-03 10:17:07 +0000)
  9> print(url)
Optional(https://www.google.com)

关于Swift日期(通过添加:to:) returns nil for trivial calculation in REPL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60459151/

相关文章:

ios - 后台执行,将记录写入核心数据

swift - sprite.xScale 响应速度慢

objective-c - 如何在 Swift 中使用 NSSet<Class>(导出为 Set<NSObject>)?

r - 按 R 中可用总数据的最后 12 个月过滤数据

scala - scala REPL 内的静态导入

scala - 有没有办法在 Scala 的 REPL 中使用 ctrl-d 作为前向删除?

swift - UIAlertView clickedButtonAtIndex

SQL 从时间戳差异中提取值

java - 将带有时区的字符串转换为日期

julia - Julia REPL 中仅允许有限输出的选项是什么?