Быстрая функция, возвращающая массив
Я изучаю Swift, и я могу понять, как создать простую функцию, которая принимает в Array и возвращает Array. Вот мой код:
func myArrayFunc(inputArray:Array) -> Array{
var newArray = inputArray
// do stuff with newArray
return newArray
}
Красная ошибка, которую я получаю: Ссылка на общий тип "Массив" требует аргументов в < >
Ответы
Ответ 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
}