Как добавить объекты в массив из класса в Swift?

#arrays #swift

Вопрос:

Это мой класс друзей:

 class Friend {  var firstName: String = ""  var lastName: String = ""  var age: Int = 0  var description:String = ""   init(firstname: String, lastname: String, age: Int) {  self.firstName = firstname  self.lastName = lastname  self.age = age  } }  

Здесь я должен объявить и создать экземпляр 5 Friend объектов в функции viewDidLoad и добавить их в массив «Список друзей».

 import UIKit  class ViewController: UIViewController {   var friendsList: [Friend] = []   override func viewDidLoad() {  super.viewDidLoad()  // Do any additional setup after loading the view.   friendsList.append("John", "Doe", 20)  } }  

Свифт говорит мне, что «Нет точных совпадений в вызове метода экземпляра «добавить»» в строке «Список друзей.добавить».

Комментарии:

1. Ничто в вашем коде не создает Friend объекты, вам придется где-то это сделать.

2. Вы могли бы создать свою Friend внутреннюю функцию добавления, например: friendsList.append(Friend(firstname: "John", lastname: "Doe", age: 20))

Ответ №1:

вы можете использовать, как показано ниже, если вы изначально создаете всех друзей

 let friends = [Friend(firstname: "John", lastname: "Doe", age: 20),Friend(firstname: "doe", lastname: "John", age: 21)]    for friend in friends{  friendsList.append(friend)  }  //////////////////////////////////////  (or) you can directly declare value for your global variable   friendsList = [Friend(firstname: "John", lastname: "Doe", age: 20),Friend(firstname: "doe", lastname: "John", age: 21)] ///////////////////////////////////////////  (or) assign local variable value to your global variable friendsList = friends  

или,если вы добавляете один за другим, сначала вам нужно создать объект

 let friendOne = Friend(firstname: "John", lastname: "Doe", age: 20)  friendsList.append(friendOne)  

Ответ №2:

Функция добавления массива (фактически коллекции) принимает параметр типа lt;Tgt; , где T является общим типом, «тип элементов в массиве».

Поэтому, если у вас есть массив строк, вам нужно передать строку в добавление:

 var strings = [String]()  strings.append("a string")  

Поскольку у вас есть массив Friend объектов, вам необходимо передать экземпляр Friend append(_:) функции. Соответствует ли выражение в круглых скобках в вашем вызове для добавления объекту друга?

 friendsList.append("John", "Doe", 20)  

Это не. Вы передаете список свойств, разделенных запятыми. Предположительно, это имя, фамилия и возраст а Friend , но append() функция этого не знает.

Вы могли бы написать это так:

 let aFriend = Friend(firstname: "John", lastname: "Doe", age: 20) friendList.append(aFriend)  

Или все в одной строке с:

 friendList.append(Friend(firstname: "John", lastname: "Doe", age: 20))  

Оба эти варианта будут работать.