美文网首页
Swift常用协议-Comparable

Swift常用协议-Comparable

作者: 黑色幽默_0d96 | 来源:发表于2023-08-03 15:34 被阅读0次

    先看协议源码

    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中==必须实现),不满足的话,>、 >=必定满足

    相关文章

      网友评论

          本文标题:Swift常用协议-Comparable

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