繁体   English   中英

swift函数返回一个数组

[英]swift function returning an Array

我正在学习Swift,我可以理解如何创建一个接收数组并返回数组的简单函数。 继承我的代码:

 func myArrayFunc(inputArray:Array) -> Array{

 var newArray = inputArray

// do stuff with newArray

 return newArray
 }

我得到的红色错误是:对泛型类型'Array'的引用需要<>中的参数

在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> {}

取决于你想要做什么。 如果你想要一个带有特定类型MyType数组的专用函数,那么你可以编写如下内容:

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

如果你想要一个通用数组函数,那么你必须使用泛型。 这将采用泛型类型T的数组并返回泛型类型U的数组:

func myGenericArrayFunc<T, U>(inputArray: [T]) -> [U] {

}

Swift中没有Array这样的东西,但是有某种类型的数组,所以你应该给函数一个泛型类型,比如:

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

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

谢谢所有人(特别是Kirsteins)。 所以我想出了这个效果很好并且看起来合乎逻辑的例子:

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

var newArray = inputArray

// do stuff with newArray

return newArray
}

这应该这样做:

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM