Для того, чтобы ваша функция работала, вы должны изменить свой код:
func sumaEnteros(enteros : NSArray) -> Int {
var result = 0
for i in enteros{
result += enteros.indexOfObject(i)
}
return result
}
Однако я я не уверен, что он достигнет того, чего вы хотите. Эта функция суммирует все индексы в вашем массиве. Например, для массива, содержащего 5 элементов, он будет выводить 0 + 1 + 2 + 3 + 4 = 10.
Судя по вашему вопросу, вы хотите вместо этого суммировать все NSNumber
s, которые содержатся в вашем массиве. Если это так, то вы должны изменить его на:
func sumaEnteros(enteros : NSArray) -> Int {
var result = 0
for i in enteros{
if let number = i as? NSNumber {
result += Int(number.intValue)
}
}
return result
}
Это хорошо работает в случае, если вам действительно нужно иметь NSArray
. Тем не менее, если вы можете заменить его Array
типа Свифта, то вы можете сделать эту функцию столь значительно проще:
func sumaEnteros(enteros : [Int]) -> Int {
return enteros.reduce(0, combine: +)
}
Наконец, в случае, если вы на самом деле хотите, чтобы подвести индексы в массиве (а не число содержащиеся в нем), тогда вы должны использовать формулу. Индексы всегда идут как 0,1,2,3,4 ... n. Это простая арифметическая прогрессия. Вы можете прочитать о формуле для расчета ее суммы here.
Используя эту формулу, ваша функция будет выглядеть следующим образом:
func sumaEnteros(enteros : NSArray) -> Int {
return Int(Double(enteros.count)*Double(enteros.count-1)/2)
}
Это не работает в Playground, потому что синтаксис совершенно неправильно. Компилировать это обычный проект и работать с ошибками компилятора ... 'для NSNumber i в enteros' выглядит как слепая копия некоторого кода Objective-C. 'enteros.indexOfObject (i)' не имеет никакого смысла в этом контексте. –