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 to share
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 to share