我正在尝试使用NSNumber添加一个NSArray的所有元素。为什么这段代码在游乐场示例中不起作用?
func sumaEnteros(enteros : NSArray) -> Int {
var result = 0
for NSNumber i in enteros{
result += enteros.indexOfObject(i)
}
return result
}
Param“enteros”在游乐场被标记为错误。
答案 0 :(得分:3)
private returnType otherMethod(int modelId){}
或更简单:
func sumaEnteros(enteros : [Int]) -> Int {
var result = 0
for val in enteros{
result += val
}
return result
}
sumaEnteros([1, 2, 3])
不要使用NSArray
答案 1 :(得分:1)
请勿使用NSArray
。 Swift希望对其数组进行输入,因此请将其声明为[NSNumber]
。虽然它是一个错误,但你的for
循环应该使用for...in
构造而不是使用索引变量。
答案 2 :(得分:0)
为了使您的功能正常工作,您应该将代码更改为:
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
。如果是这种情况,那么您应该将其更改为:
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
,这种方法很有效。但是,如果您可以使用Swift的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)
}