首页 > 解决方案 > Swift,尝试按对象属性类型字符串对数组进行排序,对象符合可比较的协议

问题描述

我想根据字符串而不是 ID 对新员工数组进行排序,我可以对 ID 属性进行排序,但不能对 Name Property.Tried

var newEmployeeArray = employeeArray.sorted(by:{$0.Name<$1.Name})

但不工作

class employee:Comparable {
var id = 10
var name = "Deepak"
init(){

}
init(Id:Int , Name:String){
    self.id = Id
    self.name = Name
}
static func == (lhs:employee, rhs:employee)->Bool{
    return lhs.id==rhs.id && lhs.name == rhs.name
}
static func < (lhs:employee, rhs:employee)->Bool{
    //Have i written this logic correct?
    if(lhs.id != rhs.id){
        return lhs.id<rhs.id
    }else{
        return lhs.name<rhs.name
    }
}
}
var a1 = employee(Id:15,Name:"Deepak")
var b1 = employee(Id:10,Name:"Shekhar")
var employeeArray = [a1,b1]

var newEmployeeArray = employeeArray.sorted(by:{$0.Name<$1.Name})//Not working

//var newEmployeeArray = employeeArray.sorted()// Working for ID

print(newEmployeeArray[0].id,newEmployeeArray[1].id,separator:",")

我希望 newEmployeeArray 按 name 属性排序。

标签: iosswiftiphonesortingcomparable

解决方案


如前所述Paulw11,您应该坚持命名约定。

你可以在这里找到一些信息:

https://swift.org/documentation/api-design-guidelines/

变量以小写字母开头,您name的类中的属性employee(顺便说一下应该称为Employee)以小写字母开头,这很好。但是要访问它,您应该name使用小写字母进行调用。

var newEmployeeArray = employeeArray.sorted(by:{ $0.name < $1.name })

祝你今天过得愉快,

Vincent

推荐阅读