我有一些对象数组,我需要在其中找到特定键的总和。
我在对象
中有以下属性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."
答案 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?
,则会有效。
这引出了一个问题:为什么dueAmount
和dueIndex
首先是选项。他们一定是吗?
正如Eendje所说,Swift的做法是使用reduce
:
let totalAmount = duesArray.reduce(0.0) { $0 + ($1.dueAmount ?? 0.0) }