我试图按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
答案 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