Подтвердить что ты не робот

Быстрая функция, возвращающая массив

Я изучаю Swift, и я могу понять, как создать простую функцию, которая принимает в Array и возвращает Array. Вот мой код:

 func myArrayFunc(inputArray:Array) -> Array{

 var newArray = inputArray

// do stuff with newArray

 return newArray
 }

Красная ошибка, которую я получаю: Ссылка на общий тип "Массив" требует аргументов в < >

4b9b3361

Ответ 1

В Swift Array есть общий тип, поэтому вам нужно указать, что содержит массив типов. Например:

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

Если вы хотите, чтобы ваша функция была общей, используйте:

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

Если вы не хотите указывать тип или иметь общую функцию, используйте Any type:

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

Ответ 2

В зависимости от того, что именно вы хотите сделать. Если вам нужна специализированная функция, которая принимает массив типа MyType определенного типа, вы можете написать что-то вроде:

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

Если вам нужна общая функция массива, вам придется использовать generics. Это потребует массив типового типа T и возвращает массив общего типа U:

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

}

Ответ 3

В Swift нет такой вещи, как Array, но существуют массивы определенного типа, поэтому вы должны дать функции общий тип, например:

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

а затем вызовите его, создав экземпляр T для определенного типа и передав массив такого типа.

Ответ 4

спасибо всем (особенно Kirsteins). Поэтому я придумал этот пример, который хорошо работает и выглядит логичным:

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

var newArray = inputArray

// do stuff with newArray

return newArray
}

Ответ 5

Это должно сделать это:

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
}

Ответ 6

Попробуйте это

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

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

   var _arr = arr

return _arr
}