无法对Swift数组进行排序

时间:2015-08-02 07:52:34

标签: swift

我试图按contacts

severity数组进行排序
    var contacts: [Contact]?   

    if let customer = CoreDataAccess.sharedInstance.getSavedCustomer() {
       //Cast from NSSet to [Contact]        
       self.contacts = customer.contacts.allObjects as? [Contact]
       self.contacts!.sort({$0.severity < $1.severity}) //error
    }

编译器在标记的行中出错,并显示以下消息:

Cannot invoke 'sort' with an argument list of type '((_, _) -> _)'

我不确定我做错了什么,因为同样的事情在另一个文件中有效。如果它有助于解释,上面的代码在WatchKit界面上运行时会崩溃,但在iOS中使用时则不会崩溃。

编辑:严重性为NSNumber

3 个答案:

答案 0 :(得分:1)

我认为问题是联系人“​​严重性”的属性!

“严重性”类型是您的自定义类型,它不是像“&lt;”

那样实现比较运算符

因为严重性是NSNumber 我们可以这样做

func <(lhs: NSNumber, rhs: NSNumber) -> Bool {
    return lhs.compare(rhs) == NSComparisonResult.OrderedAscending
}
func >(lhs: NSNumber, rhs: NSNumber) -> Bool {
    return lhs.compare(rhs) == NSComparisonResult.OrderedDescending
}
func ==(lhs: NSNumber, rhs: NSNumber) -> Bool {
    return lhs.compare(rhs) == NSComparisonResult.OrderedSame
}

然后代码将正常工作。

答案 1 :(得分:1)

尝试将第一个参数显式转换为NSNumber并使用compare:方法(我在Playground中测试了它)

var contacts: [Contact]?
if let customer = CoreDataAccess.sharedInstance.getSavedCustomer() {
  //Cast from NSSet to [Contact]
  self.contacts = customer.contacts.allObjects as? [Contact]
  self.contacts!.sort { ($0.severity as NSNumber).compare($1.severity) == .OrderedAscending }
}

如果可能,请考虑使用Int而不是NSNumber

答案 2 :(得分:0)

试试这个:

setOnClickListener