使用 NSArray 作为函数参数
Using NSArray as function parameter
我正在尝试使用 for 中的 NSNumber 添加一个 NSArray 的所有元素。为什么此代码在 playground 示例中不起作用?
func sumaEnteros(enteros : NSArray) -> Int {
var result = 0
for NSNumber i in enteros{
result += enteros.indexOfObject(i)
}
return result
}
Param "enteros" 在 playground 中被标记为错误。
不要使用 NSArray
。 Swift 想要它的数组是有类型的,所以将它声明为 [NSNumber]
。虽然这是一个错误,但您的 for
循环应该使用 for...in
构造而不是使用索引变量。
func sumaEnteros(enteros : [Int]) -> Int {
var result = 0
for val in enteros{
result += val
}
return result
}
sumaEnteros([1, 2, 3])
或更简单:
func sumaEnteros2(enteros : [Int]) -> Int {
return enteros.reduce(0, combine: +)
}
不要使用 NSArray
为了使您的功能正常工作,您应该将代码更改为:
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)
}
我正在尝试使用 for 中的 NSNumber 添加一个 NSArray 的所有元素。为什么此代码在 playground 示例中不起作用?
func sumaEnteros(enteros : NSArray) -> Int {
var result = 0
for NSNumber i in enteros{
result += enteros.indexOfObject(i)
}
return result
}
Param "enteros" 在 playground 中被标记为错误。
不要使用 NSArray
。 Swift 想要它的数组是有类型的,所以将它声明为 [NSNumber]
。虽然这是一个错误,但您的 for
循环应该使用 for...in
构造而不是使用索引变量。
func sumaEnteros(enteros : [Int]) -> Int {
var result = 0
for val in enteros{
result += val
}
return result
}
sumaEnteros([1, 2, 3])
或更简单:
func sumaEnteros2(enteros : [Int]) -> Int {
return enteros.reduce(0, combine: +)
}
不要使用 NSArray
为了使您的功能正常工作,您应该将代码更改为:
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)
}