[英]Sort NSMutableArray of custom objects in swift
我试图对自定义对象数组进行排序。 当一个数组包含一个对象时,它将返回一个带有对象的排序数组。 但是,如果数组包含多个对象,则会崩溃
class Plans:NSObject{
var price:Int
var name:String?
..
..
..
}
func price(array:NSMutableArray,sortKey:NSString)->Int{
var sortDescriptor:NSSortDescriptor = NSSortDescriptor(key: sortKey, ascending: true)
var sortedArray:NSArray = array.sortedArrayUsingDescriptors([sortDescriptor])//Crashes
var apt:Plans = sortedArray.objectAtIndex(0) as Plans
return apt.price
}
函数调用:
self.price(array,sortKey:"price") //array contains array of Plans objects
崩溃:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<pjct.Plans 0x7fb8a7bb7af0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key price.'
首先使Plans
课程实施的工具具有Comparable
和Equatable
。 方法如下:
extension Plans: Comparable {}
extension Plans: Equatable {}
然后实现两个功能:
func ==(lhs: Plans, rhs: Plans) -> Bool {
return lhs.price == rhs.price
}
func <(lhs: Plans, rhs: Plans) -> Bool {
return lhs.price < rhs.price
}
现在,您可以使用标准运算符对数组进行排序。 这是怎么
let sortedArray = (objcArray as AnyObject as [Plans]).sorted(<)
或者,如果您不想实现此协议,则可以对数组进行如下排序:
let sortedArray = (objcArray as AnyObject as [Plans]).sorted {$0.price < $1.price}
好。 最终,我能够找出问题所在。 我无法对包含Int值的数组进行排序。 所以我将“价格”从Int更改为NSNumber
var price:Int
至
var price:NSNumber
现在可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.