0

我想检查从一个时间戳到现在经过了多少秒。我有这个:

Calendar.current.dateComponents([.second], from: userInfo?["timestamp"], to: Date()).second! > preferences["secsToWait"]

但我收到了这个错误:

类型“任何”没有成员“第二”

将代码更改为:

Calendar.current.dateComponents([Calendar.Component.second], from: userInfo?["timestamp"], to: Date()).second! > preferences["secsToWait"]

将错误消息更改为:

无法使用类型为“([Calendar.Component],from:Any?,to:Date)”的参数列表调用“dateComponents”

我确实有这个:

import Foundation;

这段代码在内部被调用SafariExtensionHandler(如果重要的话)。知道是什么原因造成的吗?

4

1 回答 1

1

您收到此错误userInfo是因为类型为[AnyHashable : Any]. 这意味着 的结果userInfo?["timestamp"]是 type Any?。在没有看到您如何存储该信息的情况下,我假设您实际上是在传递一个Date对象,在这种情况下,您需要先解开时间戳,然后才能使用它。最安全的方法是:

if let timestamp = userInfo?["timestamp"] as? Date {
  //Do whatever you were going to do with
  Calendar.current.dateComponents([.second], from: timestamp, to: Date()).second! > preferences["secsToWait"]
}

你也可以这样做:

//This will crash if the value is nil or if it's not actually a Date
Calendar.current.dateComponents([.second], from: userInfo!["timestamp"] as! Date, to: Date()).second! > preferences["secsToWait"]
于 2019-12-06T20:30:25.507 回答