CVCalendarKit Swift2转Swift3遇‘==运算符歧义使用’问题求解决
解决Swift 3升级时CVcalendarKit的运算符歧义问题
我来帮你搞定这个Swift版本升级遇到的头疼问题!
问题根源
在Swift 3里,Date(对应Swift 2中的NSDate)已经默认实现了Equatable协议,系统自带了==运算符的标准实现。你现在手动定义的==运算符和系统内置的实现撞车了,编译器搞不清该用哪一个,所以抛出了Ambiguous use of operator '=='的错误。
具体解决方案
删掉自定义的
==运算符
直接移除你写的这个==重载方法,系统自带的Date相等判断完全能满足基础需求,没必要重复造轮子。调整
>=运算符的代码
原来的>=方法里依赖了自定义的==,现在换成系统自带的即可,修改后的代码如下:
// 移除自定义的==运算符实现 public func >= (lhs: Date, rhs: Date) -> Bool { // 直接用系统自带的==运算符,避免歧义 return compareWithOperation({ $0 > $1 }, resultMerge: { $0 || $1 || $2 })(lhs, rhs) || lhs == rhs }
如果你的compareWithOperation方法是用来做精细化日期比较(比如忽略时分秒只对比年月日),更推荐给Date写一个专属的扩展方法(比如isEqualIgnoringTime(to:)),而不是重载系统默认运算符——这样既能保留你的自定义逻辑,又不会和系统实现冲突。
小提醒
Swift 3对Foundation框架的类型桥接做了大量优化,像Date、String、Array这类常用类型,都默认实现了Equatable、Comparable等协议,不需要再手动重载基础运算符啦。
内容的提问来源于stack exchange,提问作者Flev40
相关产品推荐
相关产品推荐

