Как правильно структурировать функции внутри классов со ссылкой на структуры в Swift 4? - PullRequest
0 голосов
/ 21 октября 2019

Я делаю учебное задание по Swift 4. Я использую структуры, классы, массивы и функции. Я правильно создал структуру и класс, однако в моей функции я должен добавить contact к моему массиву контактов . Ниже приведен код для лучшего понимания.

Это мой код, он хорошо работает при добавлении name и phonenumber Я вижу его на игровой площадке. У меня проблемы с добавлением createContact к массиву и на самом деле печать массива с контактами. Я знаю, что должен вернуть контакт, и это работает, но когда я пытаюсь вернуть добавление к массиву , я получаю массив из-за того, что метод должен вернуть. В основном мне нужна помощь в добавлении моего контакта в массив контактов и возможности его распечатать.

Спасибо за помощь. Надеюсь, мое объяснение понятно.

struct Contact {
    var name:String
    let phoneNumber:String

    init(name:String, phoneNumber:String) {
        self.name = name
        self.phoneNumber = phoneNumber
    }
}

class ContactsManager {
    var contacts: [Contact] = []

    init(contacts: [Contact] = []) {
        self.contacts = contacts
    }

        func createContact(name: String, phoneNumber : String) -> Contact {
          Contact.init(name: name, phoneNumber: phoneNumber)
            contacts.append(Contact.init(name: name, phoneNumber: phoneNumber))
            return Contact(name: name, phoneNumber: phoneNumber)

        }

}

ContactsManager.init().createContact(name: "Daniel", phoneNumber: "011232342")
ContactsManager.init().contacts

1 Ответ

1 голос
/ 21 октября 2019

Каждый раз, когда вы что-то делаете, вы создаете отдельный экземпляр класса / структуры. Как правило, для одного концептуального «объекта» у вас должен быть один экземпляр, что означает, что вы должны вызывать init только один раз:

struct Contact {
    var name:String
    let phoneNumber:String

    init(name:String, phoneNumber:String) {
        self.name = name
        self.phoneNumber = phoneNumber
    }
}

class ContactsManager {
    var contacts: [Contact] = []

    init(contacts: [Contact] = []) {
        self.contacts = contacts
    }

    func createContact(name: String, phoneNumber : String) -> Contact {
        let contact = Contact(name: name, phoneNumber: phoneNumber)
        contacts.append(contact)
        return contact
    }
}

let manager = ContactsManager()
manager.createContact(name: "Daniel", phoneNumber: "011232342")
manager.contacts

Просто обратите внимание, что ContactsManager() эквивалентно ContactsManager.init(), поэтому яиспользовал более короткую версию.

...