如何在Swift 3中按字母顺序排列对象数组?

时间:2016-10-23 10:40:28

标签: ios arrays swift

我尝试按字母顺序列出对象数组。我创建了这个简单的测试,但不知道如何使用对象数组实现这个:

let names = ["Martin", "Nick", "Alex", "Ewa", "Barry", "Daniella", "Chris", "Robert", "Andrew"]

func alphabetizeArray(_ s1: String, _ s2: String) -> Bool {
            return s1 < s2
}
let alphabeticNames = names.sorted(by: names)
print(reversedNames)

当我尝试这个对象数组时,我想出了类似的东西:

func sorterForIDASC(this:People, that:People) -> Bool {
   return this.name > that.name
}
peoples.sort(by: sorterForIDASC)

但这会给我一个错误:Binary operator '>' cannot be applied to two 'String?' operands

任何建议如何解决这个问题。我会检查String类型的每个对象的名称。我使用Swift 3 / Xcode8。

2 个答案:

答案 0 :(得分:1)

如果您只需要>,那么为您的可选媒体资源实施>就足够了:

func >(lhs: People, rhs: People) -> Bool {
    if let left = lhs.name, let right = rhs.name {
        return left > right
    }
    return false
}

现在,您可以在对象数组上使用>

let result = arrayOfObjects.sorted(by: >)

您还可以让对象符合Equatable,并为可选属性至少实现==>

struct People: Equatable {
    var name: String?
}

func ==(lhs: People, rhs: People) -> Bool {
    if let left = lhs.name, let right = rhs.name {
        return left == right
    }
    return false
}

func >(lhs: People, rhs: People) -> Bool {
    if let left = lhs.name, let right = rhs.name {
        return left > right
    }
    return false
}

这开启了更多可能性。

答案 1 :(得分:1)

在Swift 3.0中

你可以这样做。

peoples.sort(by: { (this: People, that: People) -> Bool in
    this. name < that. name
})