Например, 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
я перехожу от основного представления ко второму представлению через переход.
@nayem Не знаю, как работает сборщик мусора в Swift, но я больше не хочу создавать новый var
, который я никогда не буду использовать. Думаю, я просто привык напрямую передавать новый массив. Есть ли разница между созданием нового var
и созданием и передачей массива непосредственно в Swift?
Вы задали эти два вопроса, верно? 1. создание нового var
, 2. создание и передача массива напрямую. И вы хотите знать, есть ли между ними разница или нет. Если я правильно понимаю ваш вопрос, то нет, нет никакой разницы. По сути, когда вы передаете массив другому методу, фактически передается полностью новый экземпляр.
@nayem Я новичок в Swift и привык просто передавать новый массив непосредственно в Java - без предварительного создания прямой ссылки, как вы делаете в Swift с помощью var bla = ...
. Но мне пока не удалось найти никакой информации о том, как сделать то же самое со Swift. Так что да, в качестве дополнительного вопроса было бы неплохо узнать, есть ли вообще смысл передавать новый массив напрямую, а если нет, то является ли это причиной, по которой я ничего не могу найти об этом.
Ну, ты слишком много думаешь об этом. Существуют фундаментальные различия между Джава и Быстрый. Java видит любой объект как ссылку, но Swift не всегда. Вам нужно больше изучить различия между value
и reference
в Swift. Swift разработан с учетом value
типов. Вы видите много struct
в Swift.
Теперь, если вы просто хотите узнать ответ на свой вопрос, вот он: myFunction([myclass1, myclass2, myclass3])
. Вы заключаете в скобки группу объектов, используя [ ]
, вы создаете экземпляр Array
. Вот и все.
Да, я - лучше изменить вещи сейчас, чем потом. You need to study the differences
- Подойдет. В настоящее время мне нужны только ссылки. Спасибо, это работает!
Это должно работать
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 Не видя фактического кода, вам трудно помочь, но похоже, что вы используете круглые скобки, как какой-то кортеж?
Нет кортежей. Я собираюсь немного отредактировать свой вопрос, надеюсь, тогда он станет немного понятнее: у меня есть класс MyClass
и я создал кучу экземпляров, которые несут данные. Эти экземпляры я хочу добавить в массив, который затем использую для создания экземпляра второго класса (MyOtherClass
- включая некоторые строки), который, в свою очередь, я передаю из своего основного представления во второе представление через переход. .
Спасибо. Должно быть, у меня были какие-то другие скобки, которые Xcode не распознал как виновника, с [myclass1, myclass2, myclass3] это работает.
В Swift Множество — это копирование при записи. Это означает, что всякий раз, когда вы передаете массив, массив копируется. Так что вам не нужно беспокоиться об экземпляре новый.