#arrays #swift
#массивы #swift
Вопрос:
Например, в 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
я перехожу из своего основного представления во второе представление через переход.
Комментарии:
1. В swift массив копируется при записи. Это означает, что всякий раз, когда вы передаете массив, массив копируется. Так что вам действительно не нужно беспокоиться о новом экземпляре.
2. @nayem Не уверен, как работает сборщик мусора в Swift, но скорее я не хочу создавать новый
var
, который я никогда не буду использовать. Наверное, я просто привык передавать новый массив напрямую. Есть ли тогда разница между созданием новогоvar
и созданием и передачей массива непосредственно в Swift?3. Вы задавали эти два вопроса, верно? 1. создание нового
var
, 2. создание и передача массива напрямую. И вы хотите знать, есть ли какая-либо разница между ними или нет. Если я правильно понимаю ваш вопрос, то нет, разницы нет . По сути, когда вы передаете массив другому методу, фактически передается совершенно новый экземпляр.4. Ну, вы слишком много думаете об этом. Существуют фундаментальные различия между Java и Swift . Java видит любой объект как ссылку, но Swift не всегда. Вам нужно изучить различия между
value
amp;reference
more в Swift. Swift разработанvalue
с учетом типов. В Swift вы видите многоstruct
«s».5. Теперь, если вы просто хотите узнать ответ на свой вопрос, вот он:
myFunction([myclass1, myclass2, myclass3])
. Вы заключаете в скобки кучу объектов, используя[ ]
, вы создаете экземплярArray
. Вот и все.
Ответ №1:
Это должно сработать
myFunction(["a","b","c"])
Это работает одинаково хорошо, если вы хотите вернуть массив из функции
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")])
Комментарии:
1. Я тоже пробовал это, но это не работает (тип «myclass», я просто использовал String, чтобы его было легче увидеть). Вместо этого он говорит:
Cannot convert value of type ‚(String, String, String)‘ to expected element type ‚String‘
.2. @Neph, не видя фактического кода, вам трудно помочь, но похоже, что вы используете круглые скобки, как какой-то кортеж?
3. Нет кортежей. Я собираюсь немного отредактировать свой вопрос, надеюсь, тогда он станет немного понятнее: у меня есть класс
MyClass
, и я создал кучу экземпляров, которые несут данные. Эти экземпляры я хочу добавить в массив, который затем использую для создания экземпляра второго класса (MyOtherClass
включая некоторые строки), который, в свою очередь, я передаю из моего основного представления во второе представление через переход.4. Спасибо. Должно быть, у меня там были какие-то другие скобки, которые Xcode не распознал как виновника, с [myclass1, myclass2, myclass3] это работает.