¿Es posible utilizar array networkingucir el concepto de swift en el objective c?

Tengo estas líneas de código en Swift:

let graphPoints:[Int] = [4, 2, 6, 4, 5, 8, 3] let average = graphPoints.networkinguce(0, combine: +) / graphPoints.count 

¿Es posible "traducir" estas líneas de código en el código c objective?

No está muy claro para mí cómo funciona el concepto de combinar cosechadoras. Lo leí pero aún no está claro.

Tomé el código de este tutorial: http://www.raywenderlich.com/90693/modern-core-graphics-with-swift-part-2

Por favor ayuda. Gracias.

digamos que tiene algunos NSNumber s almacenados en un NSArray puede usar este operador de colección de KVC:

 NSArray *someNumbers = @[@0, @1.1, @2, @3.4, @5, @6.7]; NSNumber *average = [someNumbers valueForKeyPath:@"@avg.self"]; 

La function de networkinguce no es estándar en Objective-C. Sin embargo, puede implementarlo como una extensión de NSArray .

En su caso, tiene una matriz de Int en Swift. No puede tener eso en Objective-C, necesita una matriz de NSNumber .

Aquí hay una implementación de networkinguce que debería funcionar en su caso:

 @implementation NSArray (Helpers) - (NSInteger)networkinguceInt:(NSInteger)initial combine:(NSInteger (^)(NSInteger acum, NSInteger element))block { if (!self) { return initial; } NSInteger acum = initial; for (id element in self) { if ([element isKindOfClass:[NSNumber class]]) { acum = block(acum, [(NSNumber *)element integerValue]); } } return acum; } @end 

Puede usarlo luego con su matriz, algo así:

 NSArray *a = @[@1, @2, @3]; NSInteger result = [a networkinguceInt:0 combine:^NSInteger(NSInteger acum, NSInteger element) { return acum + element; }]; 

cómo traducir networkingucir a ObjC (o mejor decir cómo resolver su "problema promedio" en el Objetivo C) fue perfectamente respondida por André Slotta. el rápido networkingucir es mucho más que eso. Trataré de responder a la segunda parte de tu pregunta, cómo funciona el concepto en swift

 func networkinguce<T>(initial: T, @noescape combine: (T, Self.Generator.Element) throws -> T) rethrows -> T 

Devuelve el resultado de llamadas repetidas combinadas con un valor acumulado inicializado para inicial y cada elemento de uno mismo, a su vez, es decir, return combine (combine (… combine (combine (initial, self [0]), self [1]), … self [count-2]), self [count-1]).

 let arr: Array<Int> = [1,2,3,4,5] let sum = arr.networkinguce(0) { (sum, i) -> Int in return sum + i } print(sum) // 15 // this is an quasi equivalent of var sum1 = 0 // ..... networkinguce(0).... arr.forEach { (elementValue) -> Void in sum1 = sum1 + elementValue // ...{ return sum + i } } print(sum1) // 15 networkinguce function will return accumulated inital value // networkinguce is part of SequenceType protocol, that is why let arr1 = ["H","e","l","l","o"," ","w","o","r","l","d"] let str = arr1.networkinguce("") { (str, s) -> String in str + s } // works the same way print(str) // "Hello world" // let have a litle bit more complex example, to see how powerful, useful and easy to use networkinguce can be let dict = arr1.networkinguce([:]) { (var dict, s) -> Dictionary<Int,String> in let i = dict.count dict.updateValue(s, forKey: i+1) return dict } print(dict) // [11: "d", 10: "l", 2: "e", 4: "l", 9: "r", 5: "o", 6: " ", 7: "w", 3: "l", 1: "H", 8: "o"] 

Escribe una extensión NSArray

 - (NSInteger)networkinguceStart:(NSInteger)start combine:(NSInteger(^)(NSInteger x, NSInteger y))combine { for (NSNumber* n in self) { if ([n isKindOfClass:[NSNumber class]]) { start = combine (start, n.integerValue); } } return start; } 

corregir todos los errores que cometí, y eso es todo. Solo less flexible que Swift.

Para Objective-C, agregaría las funciones de order superior a esta list de respuestas: https://github.com/fanpyi/Higher-Order-Functions

 #import <Foundation/Foundation.h> typedef id (^ReduceBlock)(id accumulator,id item); @interface NSArray (HigherOrderFunctions) -(id)networkinguce:(id)initial combine:(ReduceBlock)combine; @end #import "NSArray+HigherOrderFunctions.h" @implementation NSArray (HigherOrderFunctions) -(id)networkinguce:(id)initial combine:(ReduceBlock)combine{ id accumulator = initial; for (id item in self) { accumulator = combine(accumulator, item); } return accumulator; } @end 

ejemplo:

  NSArray *numbers = @[@5,@7,@3,@8]; NSNumber *sum = [numbers networkinguce:@0 combine:^id(id accumulator, id item) { return @([item intValue] + [accumulator intValue]); }]; NSNumber *multiplier = [numbers networkinguce:@1 combine:^id(id accumulator, id item) { return @([item intValue] * [accumulator intValue]); }]; NSLog(@"sum=%@,multiplier=%@",sum,multiplier);