Swift函数返回一个数组

18

我正在学习Swift,能够理解如何创建一个接受数组并返回数组的简单函数。这是我的代码:

 func myArrayFunc(inputArray:Array) -> Array{

 var newArray = inputArray

// do stuff with newArray

 return newArray
 }

我得到的红色错误是:引用泛型类型“Array”需要在<>中指定参数。


可能是在Swift中实现函数的重复问题。 - Dharmesh Kheni
6个回答

39
在Swift中,Array是泛型类型,因此您需要指定数组包含的类型。例如:
func myArrayFunc(inputArray:Array<Int>) -> Array<Int> {}
如果您希望函数具有通用性,请使用以下代码:

如果你想让你的函数更通用,就使用:

func myArrayFunc<T>(inputArray:Array<T>) -> Array<T> {}

如果您不想指定类型或者使用通用函数,可以使用 Any 类型:

func myArrayFunc(inputArray:Array<Any>) -> Array<Any> {}

请告诉我如何调用一个返回包含字典的数组的返回类型函数。 - Md Rais

8

这取决于您想做什么。如果您想要一个专门针对特定类型 MyType 数组的函数,那么您可以编写类似如下代码:

func myArrayFunc(inputArray: [MyType]) -> [MyType] {
    // do something to inputArray, perhaps copy it?
}

如果您需要一个通用的数组函数,那么您就需要使用泛型。它将接收一个泛型类型 T 的数组,并返回一个泛型类型 U 的数组:
func myGenericArrayFunc<T, U>(inputArray: [T]) -> [U] {

}

请告诉我如何调用返回包含字典的数组的返回类型函数。 - Md Rais

1
感谢大家(特别是Kirsteins)。我已经准备了一个良好运作且合乎逻辑的例子:
func myArrayFunc(inputArray:Array<String>) -> Array<String>{

var newArray = inputArray

// do stuff with newArray

return newArray
}

0

在 Swift 中并不存在 Array 这样的类型,但是有某种类型的数组存在,所以你应该给函数一个通用类型,例如:

func myArrayFunc<T>(inputArray:Array<T>) -> Array<T>{  
   // do what you want with the array
}

然后通过实例化T为特定类型并传递该类型的数组来调用它。


-1

这应该可以:

func myArrayFunc<T>(inputArray:Array<T>) -> Array<T> {

  var newArray = inputArray

  // do stuff with newArray

  return newArray
}

你声明了泛型类型T,它只是一个占位符。由于它没有任何要求,T可以被任何类型替换(在调用函数时)。因此,你的函数可以像这样被调用:
myArrayFunc([1, 2, 3])

或者这样:

myArrayFunc(["a", "b", "c"])

通常情况下,首选语法是[T]而不是Array<T>,尽管两者都是正确的。
func myArrayFunc<T>(inputArray: [T]) -> [T] {

  var newArray = inputArray

  // do stuff with newArray

  return newArray
}

-1

试试这个

var test = doArray([true,true,true])

test.count
func doArray(arr : [AnyObject]) -> [AnyObject] {

   var _arr = arr

return _arr
}

AnyObject 是一种类型,而不是泛型。因此,您的函数只能接受 AnyObject 数组。您的代码无法运行。 - oisdk
哦...它对我来说没有运行...。我认为有一些隐式转换正在进行。看看这个swiftstub - oisdk
另外,[1, 1, 1][true, true, true]不同。 - oisdk
[1,1,1] 相当于 [true,true,true],false 则是 [0,0,0]。我猜这是从 Bool 转换为 AnyObject 来的。无论如何,有一个使用泛型的被接受的答案。 - halfred

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接