Возврат/передача нового массива в функцию (Swift 5)

Например, Java вы можете сделать что-то вроде этого:

myFunction(new MyClass[]{myclass1, myclass2, myclass3})

Есть ли аналог в Swift?

Я старался

myFunction([MyClass](myclass1,myclass2,myclass3))

и Xcode предложил изменить его на

myFunction([MyClass](arrayLiteral: myclass1,myclass2,myclass3))

но документальный фильм (нажмите) говорит вам не вызывать "arrayLiteral" напрямую.

Редактировать: Причина, по которой я хочу это сделать, немного сложна:

У меня есть класс MyClass и я создал кучу экземпляров, которые несут данные: myclass1, myclass2, myclass3

init(name na:String, number nu:Int, content c:String) {....}

Эти экземпляры я хочу добавить в массив, который затем использую для создания экземпляра второго класса MyOtherClass:

init(name n:String, someotherinfo s:String, myclassarray m:[MyClass]) {....}

Создание экземпляра:

var myotherclassthing = MyOtherClass(name:"Test", someotherinfo:"Bla", myclassarray: ??????????)

Затем этот экземпляр MyOtherClass я перехожу от основного представления ко второму представлению через переход.

В Swift Множество — это копирование при записи. Это означает, что всякий раз, когда вы передаете массив, массив копируется. Так что вам не нужно беспокоиться об экземпляре новый.

nayem 09.04.2019 11:33

@nayem Не знаю, как работает сборщик мусора в Swift, но я больше не хочу создавать новый var, который я никогда не буду использовать. Думаю, я просто привык напрямую передавать новый массив. Есть ли разница между созданием нового var и созданием и передачей массива непосредственно в Swift?

Neph 09.04.2019 11:42

Вы задали эти два вопроса, верно? 1. создание нового var, 2. создание и передача массива напрямую. И вы хотите знать, есть ли между ними разница или нет. Если я правильно понимаю ваш вопрос, то нет, нет никакой разницы. По сути, когда вы передаете массив другому методу, фактически передается полностью новый экземпляр.

nayem 09.04.2019 11:52

@nayem Я новичок в Swift и привык просто передавать новый массив непосредственно в Java - без предварительного создания прямой ссылки, как вы делаете в Swift с помощью var bla = .... Но мне пока не удалось найти никакой информации о том, как сделать то же самое со Swift. Так что да, в качестве дополнительного вопроса было бы неплохо узнать, есть ли вообще смысл передавать новый массив напрямую, а если нет, то является ли это причиной, по которой я ничего не могу найти об этом.

Neph 09.04.2019 12:07

Ну, ты слишком много думаешь об этом. Существуют фундаментальные различия между Джава и Быстрый. Java видит любой объект как ссылку, но Swift не всегда. Вам нужно больше изучить различия между value и reference в Swift. Swift разработан с учетом value типов. Вы видите много struct в Swift.

nayem 09.04.2019 12:20

Теперь, если вы просто хотите узнать ответ на свой вопрос, вот он: myFunction([myclass1, myclass2, myclass3]). Вы заключаете в скобки группу объектов, используя [ ], вы создаете экземпляр Array. Вот и все.

nayem 09.04.2019 12:23

Да, я - лучше изменить вещи сейчас, чем потом. You need to study the differences - Подойдет. В настоящее время мне нужны только ссылки. Спасибо, это работает!

Neph 09.04.2019 13:55
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
7
725
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно работать

myFunction(["a","b","c"])

Это работает одинаково хорошо, если вы хотите вернуть массив из func

func test() -> [String] {
    return ["a", "b"]
}

И он одинаково хорошо работает с пользовательским классом

MyOtherClass(name:"Test", someotherinfo:"Bla", 
             myclassarray: [MyClass(name: "A", number: 1, content: "AAA"), 
                            MyClass(name: "B", number: 2, content: "BBB")])

Я тоже пробовал это, но это не сработало (тип «myclass», я просто использовал String, чтобы его было легче увидеть). Вместо этого он говорит: Cannot convert value of type ‚(String, String, String)‘ to expected element type ‚String‘.

Neph 09.04.2019 11:34

@Neph Не видя фактического кода, вам трудно помочь, но похоже, что вы используете круглые скобки, как какой-то кортеж?

Joakim Danielson 09.04.2019 11:38

Нет кортежей. Я собираюсь немного отредактировать свой вопрос, надеюсь, тогда он станет немного понятнее: у меня есть класс MyClass и я создал кучу экземпляров, которые несут данные. Эти экземпляры я хочу добавить в массив, который затем использую для создания экземпляра второго класса (MyOtherClass - включая некоторые строки), который, в свою очередь, я передаю из своего основного представления во второе представление через переход. .

Neph 09.04.2019 11:50

Спасибо. Должно быть, у меня были какие-то другие скобки, которые Xcode не распознал как виновника, с [myclass1, myclass2, myclass3] это работает.

Neph 09.04.2019 13:39

Другие вопросы по теме