#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))
Оба эти варианта будут работать.