swift - Comparable 协议(protocol)可以通用吗?

标签 swift generics swift-protocols

考虑这个结构:

struct Person : Comparable {
    let name: String
    let age: Int
}

extension Person {
    static func < (lhs: Person, rhs: Person) -> Bool {
        return lhs.name < rhs.name
    }

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.age == rhs.age && lhs.name == rhs.name
    }
}

Person结构现在按名称排序。

但是,如果我希望能够按 name 中的任何一个进行排序怎么办?或 age , 有没有办法制作 <功能通用?

最佳答案

您不能使协议(protocol)通用。有两种方法可以解决您的问题:

您可以创建一个包装器结构,它只包含一个 Person 值,但按不同的属性组合排序。

或者,您可以想出一种方法来编写比较两个事物的方法。我们在 Swift Talk 剧集中做到了这一点:https://talk.objc.io/episodes/S01E19-from-runtime-programming-to-functions (如果你不想看视频,你可以看文字记录)。

关于swift - Comparable 协议(protocol)可以通用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44742063/

相关文章:

java - 没有明确声明泛型类型的赋值如何被滥用?

swift - 传递动态类型作为参数

swift - UICollectionView 上的可见单元不能在没有参数的情况下调用

java - 为什么 Java 在使用 lambda 泛型时选择 Object 参数化类型?

Java 抽象、泛型和构建器

ios - 可选只读变量的 Swift 协议(protocol)默认实现

arrays - Swift 3,扩展数组,其中数组的项目属于某种类型

objective-c - 如何检索连接的蓝牙设备的序列号?

SwiftUI View Builder 参数无法更改状态

ios - 使选定的 TextView 字符串变为粗体、斜体、下划线,就像 iOS 的 native "Notes"应用程序一样