Swift常用协议-Comparable

先看协议源码

public protocol Comparable : Equatable {

    static func < (lhs: Self, rhs: Self) -> Bool

    static func <= (lhs: Self, rhs: Self) -> Bool

    static func >= (lhs: Self, rhs: Self) -> Bool

    static func > (lhs: Self, rhs: Self) -> Bool
}

extension Comparable {

    public static func ... (minimum: Self, maximum: Self) -> ClosedRange<Self>

    @inlinable public static func > (lhs: Self, rhs: Self) -> Bool

    @inlinable public static func <= (lhs: Self, rhs: Self) -> Bool

    @inlinable public static func >= (lhs: Self, rhs: Self) -> Bool

    public static func ..< (minimum: Self, maximum: Self) -> Range<Self>

    prefix public static func ... (maximum: Self) -> PartialRangeThrough<Self>

    postfix public static func ... (minimum: Self) -> PartialRangeFrom<Self>
}

对于Swift标准库的简单数据类型,如Int, String等,都是遵循了Comparable协议的,但是复杂一些的Dictionary、Set、Array等, 并不是这个类型遵循了Comparable协议,而是看里面的元素是否遵循了Comparable协议

Comprable是继承Equatable的,所以struct中,所以,struct不一定必须实现==方法,但是class中,一定要实现==方法

可以看到,Comparable协议提供了常规的逻辑比较方法,<、>、<=等

与Equatable不同的是,自定义的struct、class类型,必须遵循这个协议,并实现<相关方法,才能进行判断

<是必须实现的方法,<=、>、>=则不必实现

原因很简单,对于struct中,==是有默认实现的,<满足的活,<=必定满足,
<不满足的话,会看默认实现==是否满足(注意,class中==必须实现),不满足的话,>、 >=必定满足

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容