swift - 可比协议(protocol)

标签 swift comparable swift-protocols

我正在阅读 Apple 的“使用 Swift 进行应用程序开发”文档并尝试协议(protocol)部分中的示例。在 Comparable Protocol 部分,我尝试了以下代码,但未将 Comparable 添加到结构引用中,没有遇到任何问题,它正在运行:

struct Employee: Equatable {
    var firstName : String
    var lastName : String
    var jobTitle : String
    var phoneNumber : String

    static func ==(lhs: Employee, rhs : Employee) -> Bool {
        return lhs.firstName == rhs.firstName && lhs
        .lastName == rhs.lastName
    }
    static func <(lhs: Employee, rhs : Employee) -> Bool {
        return lhs.lastName < rhs.lastName
    }

}

let employee1 = Employee(firstName: "Ben", lastName: "Atkins", jobTitle: "Front Desk", phoneNumber: "415-555-7767")
let employee2 = Employee(firstName: "Vera", lastName: "Carr", jobTitle: "CEO", phoneNumber: "415-555-7768")
let employee3 = Employee(firstName: "Grant", lastName: "Phelps", jobTitle: "Senior Manager", phoneNumber: "415-555-7770")
let employee4 = Employee(firstName: "Sang", lastName: "Han", jobTitle: "Accountant", phoneNumber: "415-555-7771")
let employee5 = Employee(firstName: "Daren", lastName: "Estrada", jobTitle: "Sales Lead", phoneNumber: "415-555-7772")

let employees = [employee1, employee2, employee3, employee4, employee5]
let employeesSorted = employees.sorted(by: <)

for employee in employeesSorted {
    print(employee)
}

但是当我尝试使用大于运算符 (<) 进行排序时:

print("Decending")

let employeesSorted2 = employees.sorted(by: >)

for employee in employeesSorted2 {
    print(employee)
}

出现错误信息:

error: referencing operator function '>' on 'Comparable' requires that 'Employee' conform to 'Comparable' let employeesSorted2 = employees.sorted(by: >)

您对这种不一致有合理的解释吗?

最佳答案

Comparable要求您实现 <运算符,然后它使用该函数以及 == 的实现弄清楚 > 的实现, <=>= .

只有当你声明你的结构是 Comparable 时才会发生这种情况,如果不这样做,编译器将不知道要使用什么函数。

只需将您的结构声明为可比较的: struct Employee: Equatable, Comparable

关于swift - 可比协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58019131/

相关文章:

swift - 协议(protocol)中的 var 作为特定协议(protocol)

swift - 如何使节点在 sprite kit swift 中移动

ios - 如何设置UITableViewCell的imageView?

swift - 以更加面向对象的方式根据三个选择之一执行操作

java - 为什么要在 compareTo(Object) 中进行转换

java - 通过在内部类中实现 Comparable 来提供多种排序选项

ios - WriteToFile 不工作 swift

java - 根据用户定义的标准对 map 进行排序?

ios - 如何从具有协议(protocol)一致性的父类(super class)调用子类方法

swift - 协议(protocol)不符合自身?