swift - Swift:DateFormatter 返回 nil
问题描述
我遇到了一个奇怪的问题,即 DateFormatter 返回 nil 以获得有效的数据字符串。
这是我的代码:
func dateFromString(_ dateString:String, format: String = "dd/MM/yy") -> Date?
{
let dueDateFormatter = DateFormatter()
dueDateFormatter.timeZone = TimeZone(identifier: "UTC")!
dueDateFormatter.dateFormat = format
let date = dueDateFormatter.date(from: dateString)
return date
}
func applicationDidFinishLaunching(_ aNotification: Notification)
{
print("Launched")
let dd = dateFromString("Aug 20", format: "MMM yy")
print (dd!)
}
在调试器中:
似乎该变量已设置并且可以在应用程序中使用,但调试器没有显示它。这是一个 Xcode 错误还是我要疯了?
在操场上一切正常,我在代码的其他区域多次使用此功能。
我正在使用 10.15.4 和 Xcode 11.4.1
解决方案
在玩了一些调试器之后,我弄清楚了为什么会这样。
发生这种情况的原因是因为它是Date
. 如果您将方法更改为返回NSDate
,调试器会正确显示它。
根据我观察到的情况:这种行为发生在 的类型组此页面上的大多数类型也会发生这种情况,这些类型也在Date
和其他类型中TimeZone
。也就是说,Swift 类型Foundation
具有对应的 Objective-C,但不是像DateFormatter
/那样的“直接端口” NSDateFormatter
。我不能很好地描述它,但基本上是Foundation
他们的文档页面不允许您在右上角选择 Objective-C 版本的类型。Foundation
. 例外情况是:
AffineTransform
Data
DateInterval
Measurement
Notification
如果您使用另一个调试器命令 ,po
您将看到它Date
正确显示 s。print
那么和 和有什么区别po
呢?
运行help print
并help po
可以告诉我们:
print
:
Evaluate an expression on the current thread. Displays any returned value with LLDB's default formatting. Expects 'raw' input (see 'help raw-input'.) Syntax: print <expr> Command Options Usage: print <expr> 'print' is an abbreviation for 'expression --'
po
:
Evaluate an expression on the current thread. Displays any returned value with formatting controlled by the type's author. Expects 'raw' input (see 'help raw-input'.) Syntax: po <expr> Command Options Usage: po <expr> 'po' is an abbreviation for 'expression -O --'
注意po
它是如何说“由类型的作者控制的格式”。如果您键入help expression
,您将看到该-O
选项的expression
作用:
如果可能,使用特定于语言的描述 API 显示。
因此可以得出结论,po
它比 Swift 更“特定于 Swift” print
,因此它能够打印出Date
和TimeZone
s 之类的东西,因为print
根本不知道如何打印 Swift Date
。
推荐阅读
- ios - UITableviews之间的匹配行高
- python - 使用 BeautifulSoup 抓取具有多个页面的表格
- javascript - 使用 1 个按钮或 1 个输入提交 2 个表单
- javascript - 页面刷新时更改图像有时会继续加载相同的图像
- go - GoLand 中的 Go 文本模板语法高亮显示
- node.js - 电子角度nodejs环境中的CORS
- php - 在创建用户时获取用户 ID 和字段
- php - 我正在尝试使用任何网络编程语言在我的电脑本地创建和存储文件
- mysql - 如何在 Kubernetes 中使用初始数据创建 mysql 容器?
- oop - Ada 扩展聚合初始化