2016-04-18 10 views
1

私は特定のキーの合計を求める必要があるオブジェクトの配列を持っています。私は、キーdueAmountためduesArrayのすべての値の合計を必要とする私は、オブジェクトすぐにカスタムオブジェクトの配列にあるキーのすべてのオブジェクトの合計を見つける方法

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

で次のプロパティは、私はこの後、アレイ

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) 
    } 

にオブジェクトを追加するには、次のロジックを持っている

。 KVCを使用して達成する方法を教えてください。

以下の行を使用して試しました。あなたは自分のduesArraydueAmountの合計をしたい場合は

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

はタイプDueと、次のエラー

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

答えて

12

を手に入れたあなたは、単にreduce()を使用することができます。

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

print(totalAmount) // 4500.0 
1

問題があることですDouble?のプロパティは、Objective-Cがnon-class-tyを処理できないためObjective-Cに公開されませんpeオプションを使用します。 var dueAmount: NSNumber?に変更すると動作します。

まず、dueAmountdueIndexがなぜオプションであるのかという質問が返されます。彼らはいなければなりませんか?

Eendjeが述べたように、これを行うのスウィフトの方法はreduceを使用することです:

let totalAmount = duesArray.reduce(0.0) { $0 + ($1.dueAmount ?? 0.0) } 
関連する問題