2016-04-18 15 views
1

Ich habe Array von Objekten, in denen ich Summe des bestimmten Schlüssels finden muss.So finden Sie die Summe aller Objekte für einige Schlüssel im Array von benutzerdefinierten Objekten in swift

Ich habe die folgenden Eigenschaften im Objekt

class Due: NSObject { 
var dueIndex: Int? 
var dueAmount: Double? 
} 

Ich habe die folgende Logik, um die Objekte zu Array

var duesArray = [Due]() 

    for i in 0..<10 { 
     let dueObject = NDDue(); 
     // Update the due object with the required data. 
     dueObject.dueIndex = i 
     dueObject.dueAmount = 100 * i 

     // Add the due object to dues array. 
     duesArray.append(dueObject) 
    } 

Danach muss ich die Summe aller Werte in duesArray für Schlüssel dueAmount hinzufügen . Bitte lassen Sie mich wissen, wie Sie es mit KVC erreichen können.

Ich habe versucht, indem Sie die folgende Zeile verwenden.

print((duesArray as AnyObject).valueForKeyPath("@sum.dueAmount")). 

Haben Sie die folgenden Fehler

failed: caught "NSUnknownKeyException", "[Due 0x7ff9094505d0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key dueAmount." 

Antwort

12

Wenn Sie nur die Summe von dueAmount in Ihrem duesArray mit Typ wollen Due dann können Sie einfach reduce():

let totalAmount = duesArray.reduce(0.0) { $0 + ($1.dueAmount ?? 0) } 

print(totalAmount) // 4500.0 
1

Das Problem ist, dass Die Eigenschaft des Typs Double? wird Objective-C nicht zur Verfügung gestellt, da Objective-C nicht mit Nicht-Klassen umgehen kann pe optionals. Wenn Sie es in var dueAmount: NSNumber? ändern, funktioniert es.

Das wirft die Frage auf, warum dueAmount und dueIndex in erster Linie Optionals sind. Müssen sie sein?

Wie Eendje erwähnt, ist der Swift Weg, dies zu tun reduce zu verwenden:

let totalAmount = duesArray.reduce(0.0) { $0 + ($1.dueAmount ?? 0.0) }