我有一个 [String:Any]
的字典,当我从 UserDefaults
加载时,我得到了一个 Date
对象,但是来自 Firebase我取回了一个 Timestamp
对象。
肯定有我的 Swifty 方式来编写这段代码吗?
var correctDate:Date!
if let t = dictionary[key.timestamp] as? Timestamp {
print("as Timestamp")
correctDate = t.dateValue()
}
else if let t = dictionary[key.timestamp] as? Date {
print("as Date")
correctDate = t
}
else {
fatalError("no date object found")
}
print(correctDate)
最佳答案
switch
是否更 Swifty?:
switch dictionary[key.timestamp] {
case let timestamp as Timestamp:
print("as TimeStamp")
correctDate = timestamp.dateValue()
case let date as Date:
print("as Date")
correctDate = date
default:
fatalError("no date object found")
}
使用协议(protocol)
您有两个对象,它们都代表日期对象。为什么不用协议(protocol)统一它们并给它们一个通用接口(interface)?
使用协议(protocol)创建 Date
和 Timestamp
都采用的 DateObject
:
protocol DateObject {
var date: Date { get }
}
extension Date: DateObject {
var date: Date { return self }
}
extension Timestamp: DateObject {
var date: Date { return self.dateValue() }
}
// Added this extension for NSDate after comments
// indicated that NSDate objects were coming back
// from UserDefaults
extension NSDate: DateObject {
var date: Date { return self as Date }
}
if let date = (dictionary[key.timestamp] as? DateObject)?.date {
print("has date")
correctDate = date
} else {
fatalError("no date object found")
}
关于swift - 以更快速的方式从 Any Object 确定 Swift 对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842118/