Swift 3 为啥不能将二元运算符“===”应用于两个“日期”操作数?
Posted
技术标签:
【中文标题】Swift 3 为啥不能将二元运算符“===”应用于两个“日期”操作数?【英文标题】:Swift 3 Why can't Binary operator '===' be applied to two 'Date' operands?Swift 3 为什么不能将二元运算符“===”应用于两个“日期”操作数? 【发布时间】:2016-12-01 16:41:51 【问题描述】:public func ==(lhs: Date, rhs: Date) -> Bool
return lhs === rhs || lhs.compare(rhs) == .orderedSame
升级到 Swift 3 后,我现在收到此错误...“二进制运算符 ===
不能应用于两个 Date
操作数”
关于如何纠正此问题的任何建议?
【问题讨论】:
Swift 3 Date 是一个已经符合 Comparable 协议的结构。 ***.com/questions/39541879/… 【参考方案1】:在 Swift 3 中,Date
是一个结构(值类型),没有身份,因此不能被 ===
'ed。
其实Date
类型已经提供了a built-in ==
所以你不需要自己实现。
【讨论】:
没有身份是什么意思? @Honey Identity = 参考 = 指针值。具有相同值的结构彼此无法区分,即您不能为每个结构值分配标识。见***.com/a/25334176/224671。【参考方案2】:虚拟代码 sn-p 以供将来参考。主要部分是使用timeIntervalSinceNow
,它将转换为Double
,然后进行比较
let inputFormatter = DateFormatter()
inputFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")
inputFormatter.dateFormat = "MMM dd, yyyy hh:mm:ss a"
dataArray = dataArray.sorted(by: (crm1 : CRM, crm2 : CRM) -> Bool in
inputFormatter.date(from: crm1.date1!)!.timeIntervalSinceNow <= inputFormatter.date(from: crm2.date1!)!.timeIntervalSinceNow
)
【讨论】:
【参考方案3】:Leo Dabus 指出了一篇文章SOLUTION POST
我使用 >= 来纠正问题。
【讨论】:
您可以使用任何比较运算符。只需删除您之前为 NSDate 定义的所有自定义运算符【参考方案4】:我已经通过强制解开日期对象来解决它
let secondF = DateFormatter()
secondF.dateFormat = "yyyy-MM-dd"
let startdate = secondF.date(from: "2020-03-01")
let endDate = secondF.date(from: "2020-02-01")
if startdate! == endDate!
print("succedded")
【讨论】:
以上是关于Swift 3 为啥不能将二元运算符“===”应用于两个“日期”操作数?的主要内容,如果未能解决你的问题,请参考以下文章
二元运算符“==”不能应用于“字符串?”类型的操作数和 Swift 3 中的“布尔”
Swift 二元运算符“+”不能应用于两个 CGFloat 操作数
解析 / Swift 问题与 tableviewcell“二元运算符'=='不能应用于单元格和 nil 类型的操作数”
二元运算符“==”不能应用于“布尔”和“字符串?”类型的操作数对于 2020 年的 Swift [重复]