美文网首页
Swift 比较运算符

Swift 比较运算符

作者: chernyog | 来源:发表于2017-08-24 11:04 被阅读165次

动机

Swift 升级至 3.0 以后,Swift 标准库中移除了对可选类型比较运算符的实现,当我们升级 Swift 版本的时候,可能会出现若干问题,为了代码重构需要,所以重写比较运算符。

代码变更记录

Swift2.3 时代的代码如下

if (self?.monthParams.filter{ return $0.length == 0 })?.count > 0 {
    self?.showTip("请输入日期")
}

升级到 Swift3.0 以后,需要这样写

if ((self?.monthParams.filter{ return $0.length == 0 })?.count ?? 0) > 0 {
    self?.showTip("请输入日期")
}
  • Tips

    • 这里的 > 左右两边的操作数,必须是非可选类型!所以会出现大量的类似于?? 0这样的代码!
    • 只修改一处无关紧要,一旦涉及到整个项目,可想而知有多么的蛋疼……
  • 分析

    • 出现这个问题的根本原因是 Swift3.0 后,运算符两边的操作数必须是非可选类型
    • 我们可以重写比较运算符,让它接受可选类型的操作数,这样代码就不需要修改了!

☆ 重写运算符

public func > <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
    switch (lhs, rhs) {
    case let (l?, r?):
        return l > r
    case (nil, _):
        return false
    case (_, nil):
        return true
    default:
        return false
    }
}
public func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
    return rhs > lhs
}
public func >= <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
    return lhs > rhs || lhs == rhs
}
public func <= <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
    return rhs >= lhs
}

这样就可以愉快地玩耍了,哈哈哈!

附录

Swift 标准库中的部分比较运算符

public func <(lhs: Int, rhs: Int) -> Bool
public func <=(lhs: Int, rhs: Int) -> Bool
public func >(lhs: Int, rhs: Int) -> Bool
public func >=(lhs: Int, rhs: Int) -> Bool

public func ==<T>(lhs: T?, rhs: T?) -> Bool where T : Equatable

相关文章

  • Swift 基本语法(二)— 运算符

    swift 运算符1.赋值运算符“=” 没有返回值, 比较运算符“==” 返回bool值。 这是swift比OC...

  • Swift笔记二:基本运算符

    组合赋值运算符 Swift Objective-C Swift中复合赋值运算没有返回值。 元组比较大小 空合运算符...

  • swift 运算符

    Swift 基本运算符 标签(空格分隔): swift 运算符 zybuluo swift 运算符 特性 赋值运算...

  • swift 比较运算符方法

    swift 比较运算符方法 代码如下: // FIXME: comparison operators with o...

  • Swift 比较运算符

    动机 Swift 升级至 3.0 以后,Swift 标准库中移除了对可选类型比较运算符的实现,当我们升级 Swif...

  • swift教程(2)

    swift的运算 加减乘除 三目运算符 与或关系 运算比较

  • Swift 运算符(1)

    运算符是一个符号,用于告诉编译器执行一个数学或逻辑运算。Swift 提供了以下几种运算符: 算术运算符 比较运算符...

  • Swift 运算符

    运算符是一个符号,用于高速编译器执行一个数学或者逻辑运算。Swift提供以下几种运算符: 算术运算符比较运算符逻辑...

  • Swift002-运算符和流程控制语句

    Swift002-运算符和流程控制语句 运算符 Swift支持大多数标准C运算符,并有所改进。 赋值运算符(=)不...

  • 赋值和算数运算符

    基本概念 一元运算符、二元运算符、三元运算符Swift 只有一个三元运算符 a ? b : c Swift 运算符...

网友评论

      本文标题:Swift 比较运算符

      本文链接:https://www.haomeiwen.com/subject/cwwsdxtx.html