2017-03-21 3 views
1

ich nicht eine Zählung von einer einzigen Eigenschaft in einem asynchronen Abruf Keule kann, ich möchte alle expenseAmount für gegeben Summ async holen, sondern kann in Muster nicht anwendenswift 3.1 zusammenzufassen async Eigenschaften holen

meine Einheit:

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? 

} 

meiner Ansicht Controller ich diese func in meinem viewDidLoad nennen, wie ich die expenseAmount Werte für alle abgerufenen Entitäten wählen könnten und Summ?

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



} 

Antwort

0

Karte die Expenses Array auf die expenseAmount Werte und summieren sie.

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

PS: Nach der Swift 3 Namensgebungspolitik Ich empfehle die Expense Eigenschaften zu nennen nur amount, date, owner und tag und die redundanten Teile zu entfernen, da es klar ist, dass die Eigenschaften zu Expense gehören.

+0

Dank für Ihre Hilfe, fügte ich die Zeichenfolge nach self.expenseTableView.reloadData() und Arbeits der ist, aber könnten Sie die Verwendung von verringern klären? – biggreentree

+0

'reduce' einen Startwert (von 0) erklärt, fügt alle Elemente im Array und gibt die Summe. – vadian