我正在学习Swift,我可以理解如何创建一个接收数组并返回数组的简单函数。继承我的代码:
func myArrayFunc(inputArray:Array) -> Array{
var newArray = inputArray
// do stuff with newArray
return newArray
}
我得到的红色错误是:对泛型类型'Array'的引用需要<>
中的参数答案 0 :(得分:32)
在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> {}
答案 1 :(得分:8)
取决于你想要做什么。如果你想要一个带有特定类型MyType数组的专用函数,那么你可以编写类似的东西:
func myArrayFunc(inputArray: [MyType]) -> [MyType] {
// do something to inputArray, perhaps copy it?
}
如果你想要一个通用数组函数,那么你必须使用泛型。这将采用泛型类型T的数组并返回泛型类型U的数组:
func myGenericArrayFunc<T, U>(inputArray: [T]) -> [U] {
}
答案 2 :(得分:0)
在Swift中没有Array
这样的东西,但是有某种类型的数组,所以你应该给函数一个泛型类型,比如:
func myArrayFunc<T>(inputArray:Array<T>) -> Array<T>{
// do what you want with the array
}
然后通过将T实例化为特定类型并传递此类型的数组来调用它。
答案 3 :(得分:0)
感谢所有人(特别是Kirsteins)。所以我提出了这个效果很好并且看起来合乎逻辑的例子:
func myArrayFunc(inputArray:Array<String>) -> Array<String>{
var newArray = inputArray
// do stuff with newArray
return newArray
}
答案 4 :(得分:-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
}
答案 5 :(得分:-1)
试试这个
var test = doArray([true,true,true])
test.count
func doArray(arr : [AnyObject]) -> [AnyObject] {
var _arr = arr
return _arr
}