簡體   English   中英

快速排序自定義對象的NSMutableArray

[英]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課程實施的工具具有ComparableEquatable 方法如下:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM