Swift date(byAdding:to:) returns nil 用于 REPL 中的简单计算
Swift date(byAdding:to:) returns nil for trivial calculation in REPL
我希望这个 return 一个 Date
对象代表从现在开始一小时后的时间:
Calendar.current.date(byAdding: DateComponents(hour: 1), to: Date())
然而它 returns nil
。这似乎是对 API 的一种相当直接的使用,所以也许我对 API 应该如何工作有一些基本的误解?
这 仅 似乎影响 swift
命令行 REPL 包含在 Xcode 中(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 中的错误,请参阅
- SR-11593 REPL incorrectly reports URL as nil
- SR-12172 Description of Date? expression is printed as nil even when non-nil
它会影响某些 Swift 覆盖类型(例如 Date
、Calendar
、URL
)的可选值和非可选值。示例:
$ 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)
我希望这个 return 一个 Date
对象代表从现在开始一小时后的时间:
Calendar.current.date(byAdding: DateComponents(hour: 1), to: Date())
然而它 returns nil
。这似乎是对 API 的一种相当直接的使用,所以也许我对 API 应该如何工作有一些基本的误解?
这 仅 似乎影响 swift
命令行 REPL 包含在 Xcode 中(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 中的错误,请参阅
- SR-11593 REPL incorrectly reports URL as nil
- SR-12172 Description of Date? expression is printed as nil even when non-nil
它会影响某些 Swift 覆盖类型(例如 Date
、Calendar
、URL
)的可选值和非可选值。示例:
$ 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)