我正在学习Swift,能够理解如何创建一个接受数组并返回数组的简单函数。这是我的代码:
func myArrayFunc(inputArray:Array) -> Array{
var newArray = inputArray
// do stuff with newArray
return newArray
}
我得到的红色错误是:引用泛型类型“Array”需要在<>中指定参数。
Array
是泛型类型,因此您需要指定数组包含的类型。例如:func myArrayFunc(inputArray:Array<Int>) -> Array<Int> {}
如果您希望函数具有通用性,请使用以下代码:
如果你想让你的函数更通用,就使用:
func myArrayFunc<T>(inputArray:Array<T>) -> Array<T> {}
如果您不想指定类型或者使用通用函数,可以使用 Any
类型:
func myArrayFunc(inputArray:Array<Any>) -> Array<Any> {}
这取决于您想做什么。如果您想要一个专门针对特定类型 MyType 数组的函数,那么您可以编写类似如下代码:
func myArrayFunc(inputArray: [MyType]) -> [MyType] {
// do something to inputArray, perhaps copy it?
}
func myGenericArrayFunc<T, U>(inputArray: [T]) -> [U] {
}
func myArrayFunc(inputArray:Array<String>) -> Array<String>{
var newArray = inputArray
// do stuff with newArray
return newArray
}
在 Swift 中并不存在 Array
这样的类型,但是有某种类型的数组存在,所以你应该给函数一个通用类型,例如:
func myArrayFunc<T>(inputArray:Array<T>) -> Array<T>{
// do what you want with the array
}
然后通过实例化T为特定类型并传递该类型的数组来调用它。
这应该可以:
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
}
试试这个
var test = doArray([true,true,true])
test.count
func doArray(arr : [AnyObject]) -> [AnyObject] {
var _arr = arr
return _arr
}
AnyObject
是一种类型,而不是泛型。因此,您的函数只能接受 AnyObject
数组。您的代码无法运行。 - oisdk[1, 1, 1]
与[true, true, true]
不同。 - oisdk