Decrease array of managed objects in Swift

I'm having a problem defining the syntax to shrink a subclass array of a subclass of a managed object in Swift. I have subclasses of managed objects whose property is called NSNumber. How to use the decrement function to get the sum of the sum for each item in an array of managed objects. Here is what I tried, but I get the error "cannot find the number of members".

let reduceSum=myArray.reduce(0) {$0 + $1.amount}

      

I looked at this example but it didn't help as I get that I can't find the member error.

+3


source to share


2 answers


Immediately after posting this question, I tried one more thing and it worked. The error message was misleading and made me think the syntax was wrong, but the real problem was the NSNumber to CGFloat conversion. Here's what worked:



let reduceSum=myArray.reduce(0) {$0 + CGFloat($1.amount)}

      

+8


source


extension Array {
    var sumInt:     Int     { return map { $0 as! Int     }.reduce(0) { $0 + $1 } }
    var sumUInt:    UInt    { return map { $0 as! UInt    }.reduce(0) { $0 + $1 } }
    var sumUInt8:   UInt8   { return map { $0 as! UInt8   }.reduce(0) { $0 + $1 } }
    var sumUInt16:  UInt16  { return map { $0 as! UInt16  }.reduce(0) { $0 + $1 } }
    var sumUInt32:  UInt32  { return map { $0 as! UInt32  }.reduce(0) { $0 + $1 } }
    var sumUInt64:  UInt64  { return map { $0 as! UInt64  }.reduce(0) { $0 + $1 } }
    var sumDouble:  Double  { return map { $0 as! Double  }.reduce(0) { $0 + $1 } }
    var sumFloat:   Float   { return map { $0 as! Float   }.reduce(0) { $0 + $1 } }
    var sumCGFloat: CGFloat { return map { $0 as! CGFloat }.reduce(0) { $0 + $1 } }
    var sum: T {
        if !isEmpty {
            if first is Int    { return sumInt     as! T }
            if first is UInt   { return sumUInt    as! T }
            if first is UInt8  { return sumUInt8   as! T }
            if first is UInt16 { return sumUInt16  as! T }
            if first is UInt32 { return sumUInt32  as! T }
            if first is UInt64 { return sumUInt64  as! T }
            if first is Double { return sumDouble  as! T }
            if first is Float  { return sumFloat   as! T }
            if first is CGFloat{ return sumCGFloat as! T }
        }
        return 0 as! T
    }
}

      

using:



let inputArrayInt:[Int]=[1,2,3]
let sumInt = inputArrayInt.sum              // 6

let inputArrayUInt:[UInt]=[1,2,3]
let sumUInt = inputArrayUInt.sum            // 6

let inputArrayUInt8:[UInt8]=[1,2,3]
let sumUInt8 = inputArrayUInt8.sum          // 6

let inputArrayUInt16:[UInt16]=[1,2,3]
let sumUInt16 = inputArrayUInt16.sum        // 6

let inputArrayUInt32:[UInt32]=[1,2,3]
let sumUInt32 = inputArrayUInt32.sum        // 6

let inputArrayUInt64:[UInt64]=[1,2,3]
let sumUInt64 = inputArrayUInt64.sum        // 6

let inputArrayDouble:[Double]=[1.0,2.0,3.0]
let sumDouble = inputArrayDouble.sum        // 6.0

let inputArrayFloat:[Float]=[1.0,2.0,3.0]
let sumFloat = inputArrayFloat.sum          // 6.0

let inputArrayCGFloat:[CGFloat]=[1.0,2.0,3.0]
let sumCGFloat = inputArrayCGFloat.sum      // 6.0

let inputArray = [1.3,2,3]
let sum = inputArray.sum   // 6.3

      

+3


source







All Articles