我尝试按字母顺序列出对象数组。我创建了这个简单的测试,但不知道如何使用对象数组实现这个:
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。
答案 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
})