如何在Swift中的同一个类中创建类对象的数组

时间:2017-06-16 10:37:21

标签: ios iphone swift

我在Swift 3.0中有一个查询。我正在调用Web服务并从服务器获取一组联系人。我正在创建一个班级联系人:

Class Contacts: NSObject {
    var address : String?
    var email : String?
    var gender : String?
    var name : String?
    var id : String?
    var phone : String?

//var array to store class object

     var arrayOfContacts = [Contacts]()

        override init() {
            super.init()
        }
    }

我需要从代码中的某个地方访问arrayOfContacts中的所有对象存储。

我应该如何创建这样的功能,或者我的方法是错误的?

3 个答案:

答案 0 :(得分:3)

两种方式

方式1:

将您的arrayOfContacts声明为静态

class Contacts: NSObject {
    var address : String?
    var email : String?
    var gender : String?
    var name : String?
    var id : String?
    var phone : String?

    //var array to store class object

    static var arrayOfContacts = [Contacts]()
    override init() {
        super.init()
    }
}

并将其作为

访问
print(Contacts.arrayOfContacts)

方式2:

如果您希望联系人singleton使用

class Contacts: NSObject {
    var address : String?
    var email : String?
    var gender : String?
    var name : String?
    var id : String?
    var phone : String?
    var arrayOfContacts = [Contacts]()
    static var sharedInstance = Contacts()

    private override init() {
        super.init()
    }
}

然后以

的形式访问它
Contacts.sharedInstance.arrayOfContacts

希望有所帮助

答案 1 :(得分:2)

实际上你可以在同一个类中创建一个对象数组但是你不能在同一个类中创建它,所以我提供了代码如何实现它

        Class Contacts: NSObject {
            var address : String?
            var email : String?
            var gender : String?
            var name : String?
            var id : String?
            var phone : String?

            override init() {
                super.init()
            }

           static func arrayOfObject(_ array: NSArray)-> [Contacts] {
             var contactsArr: [Contacts] = []
             for data in array {
                let cont = Contacts(...)//init all properties
                contactsArr.append(cont)
            }
            return contactsArr
           }

        }

并在获取数据的地方调用此方法

Contacts.arrayOfObject(<array of data>)

答案 2 :(得分:1)

您可以使用Singleton模式。 在操场上玩它。

import Foundation

class Contacts: NSObject {
    var address : String?
    var email : String?
    var gender : String?
    var name : String?
    var id : String?
    var phone : String?

    override init() {
        super.init()
        ContactSingleton.shared.arrayOfContacts.append(self)
    }
}

final class ContactSingleton {

    // MARK: Properties
    internal static let shared = ContactSingleton()
    internal var arrayOfContacts: [Contacts] = []

    // MARK: - Initializer
    private init() { }

}

let contact1 = Contacts()
print(ContactSingleton.shared.arrayOfContacts.count) // 1

let contact2 = Contacts()
let contact3 = Contacts()
print(ContactSingleton.shared.arrayOfContacts.count) // 3