swift 3.1如何对异步获取属性求和

时间:2017-03-21 09:57:03

标签: ios asynchronous core-data swift3 nsfetchrequest

我不能在异步提取中计算单个属性的数量,我想为给定的异步提取汇总所有expenseAmount但不能在模式中应用

我的实体:

extension Expense {

@nonobjc public class func fetchRequest() -> NSFetchRequest<Expense> {
    return NSFetchRequest<Expense>(entityName: "Expense");
}

@NSManaged public var expenseAmount: Double
@NSManaged public var expenseDate: NSDate?
@NSManaged public var expenseOwner: String?
@NSManaged public var expenseTag: String?

}

在我的视图控制器中,我在viewDidLoad中调用此func,如何选择并汇总所有已获取实体的expenseAmount值?

func makeAsyncFetch() {


    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
        return
    }
    managedContext = appDelegate.persistentContainer.viewContext


    // MARK: - async fetch request 2
    let expenseFetch = NSFetchRequest<Expense>(entityName: kExpenseEntityName)

    asyncFetchRequest = NSAsynchronousFetchRequest<Expense>(fetchRequest: expenseFetch) {
        [unowned self] (result: NSAsynchronousFetchResult) in
        guard let Expenses = result.finalResult else {
            return
        }
        self.asyncExpensesArray = Expenses
        self.expenseTableView.reloadData()
        //            self.testPrintForMyArray(arrayToCheck: self.asyncExpensesArray)
        //            self.batchUpdate()
    }
    // MARK: - async fetch request 3
    do {
        try managedContext.execute(asyncFetchRequest)
    } catch let error as NSError {
        print("Could not fetch \(error), \(error.userInfo)")
    }



}

1 个答案:

答案 0 :(得分:0)

Expenses数组映射到expenseAmount值并总结。

let sum = Expenses.map({$0.expenseAmount}).reduce(0, {$0 + $1})

PS:根据Swift 3命名理念,我建议仅Expenseamountdateowner命名tag属性并删除冗余部分,因为它清楚属性属于Expense