【问题标题】:How to correctly structure functions within classes with reference to structs in Swift 4?如何参考 Swift 4 中的结构正确构造类中的函数?
【发布时间】:2020-02-17 00:21:28
【问题描述】:

我正在做一个 Swift 4 教程挑战。我正在使用结构、类、数组和函数。我已经正确地创建了结构以及类,但是在我的函数中,我应该将 contact 附加到我的 contacts 数组。下面是代码以便更好地理解。

这是我的代码,添加 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

【问题讨论】:

    标签: arrays swift function class struct


    【解决方案1】:

    每次你做任何事情时,你都在创建一个单独的类/结构实例。通常,对于一个概念“对象”,您应该有一个实例,这意味着您应该只调用一次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(),所以我使用了较短的版本。

    【讨论】:

    • 感谢您,我完全忘记了将其分配给常量如何让生活更轻松。也不知道 ContactsManager() 和 ContactsManager.init() 是一回事。再次感谢!
    • 我也想问。我将如何打印出来?我尝试了 print(manager.contacts) 并收到错误消息。我应该将它分配给一个变量吗?
    • 这个错误:__lldb_expr_64.Contact(name: "Daniel", phoneNumber: "0119823843")
    • 这不是错误,它正在打印您的联系人数据。他们的名字是 Daniel,他们的电话号码是 0119823843。自定义打印方式取决于上下文,应该在另一个问题中询问(如果您不知道如何在网上找到它)。祝你好运!
    猜你喜欢
    • 2020-10-22
    • 2016-03-08
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    相关资源
    最近更新 更多