как перевести свести к ObjC (или лучше сказать, как решить вашу «среднюю проблему» в Objective C) был отлично ответил Андре Слотта. быстрое сокращение намного больше. Я постараюсь ответить на вторую часть вашего вопроса, как эта концепция работает в быстром
func reduce<T>(initial: T, @noescape combine: (T, Self.Generator.Element) throws -> T) rethrows -> T
возвращает результат многократного вызова в сочетании с накопленным значением инициализируется начальными и каждый элементом себя, в поворот, т. е. возврат комбинат (комбинация (комбинация (комбинация (начальная, self [0]), self [1]), ... self [count-2]), self [count-1]).
let arr: Array<Int> = [1,2,3,4,5]
let sum = arr.reduce(0) { (sum, i) -> Int in
return sum + i
}
print(sum) // 15
// this is an quasi equivalent of
var sum1 = 0 // ..... reduce(0)....
arr.forEach { (elementValue) -> Void in
sum1 = sum1 + elementValue // ...{ return sum + i }
}
print(sum1) // 15 reduce function will return accumulated inital value
// reduce is part of SequenceType protocol, that is why
let arr1 = ["H","e","l","l","o"," ","w","o","r","l","d"]
let str = arr1.reduce("") { (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 reduce can be
let dict = arr1.reduce([:]) { (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"]
какого типа делает 'graphPoints' массив содержат? –
Угадайте: 'average = [graphView.graphPoints valueForKeyPath: @" @ sum.self "]' (или, может быть, '@ avg' вместо' @ sum'). – Larme
array is: var graphPoints: [Int] = [4, 2, 6, 4, 5, 8, 3] содержит объекты int. – Adela