如何在swift中查找自定义对象数组中某些键的所有对象的总和

时间:2016-04-18 08:20:09

标签: ios arrays swift nsarray key-value-coding

我有一些对象数组,我需要在其中找到特定键的总和。

我在对象

中有以下属性
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)
    }

在此之后,我需要将duesArray中的所有值与key dueAmount相加。请告诉我如何使用KVC实现它。

我尝试使用以下行。

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

出现以下错误

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

2 个答案:

答案 0 :(得分:14)

如果您只想在duesArray中使用Due类型reduce()的总和,那么您只需使用let totalAmount = duesArray.reduce(0.0) { $0 + ($1.dueAmount ?? 0) } print(totalAmount) // 4500.0

routes.MapRoute(
            //this will always match the controller 'TEST' with its action 'Index'
            name: "TEST",
            url: "TEST/{id}",
            defaults: new { controller = "TEST", action = "Index", id = UrlParameter.Optional }

        );routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "TEST", action = "Index", id = UrlParameter.Optional }
        );

答案 1 :(得分:1)

问题是类型Double?的属性没有暴露给Objective-C,因为Objective-C无法处理非类型的选项。如果您将其更改为var dueAmount: NSNumber?,则会有效。

这引出了一个问题:为什么dueAmountdueIndex首先是选项。他们一定是吗?

正如Eendje所说,Swift的做法是使用reduce

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