Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法创建单例_Swift_Swift2_Singleton - Fatal编程技术网

Swift 无法创建单例

Swift 无法创建单例,swift,swift2,singleton,Swift,Swift2,Singleton,我想做一个联系簿,我做了一个类的联系 没有编译错误,但是当我运行init时,我没有进入“init”传递阶段 有什么问题吗 这是我的密码: import UIKit public class contact { var originalNumber: String = "" var e164Number: String = "" var contactImage: String = "" var name: String = "" init (orig

我想做一个联系簿,我做了一个类的联系

没有编译错误,但是当我运行init时,我没有进入“init”传递阶段

有什么问题吗

这是我的密码:

import UIKit

public class contact {

    var originalNumber: String = ""
    var e164Number: String = ""
    var contactImage: String = ""
    var name: String = ""

    init (originalNumber: String, name: String) {
        self.originalNumber = originalNumber
        self.name = name


    }


}
然后在我的contactDataClass中,我制作了:

import UIKit

import AddressBook // imports the framework

class contactsDataClass {

    var adbk : ABAddressBook!
    var localContacts = [contact]()

    init() {
        print("get to init")      
        contactsDataClass.sharedInstance.localContacts.append(contact(originalNumber: "0525222022", name: "try appent"))
        print("init pass")    

    } 

    struct Static {
        static var onceToken : dispatch_once_t = 0
        static var instance : contactsDataClass? = nil
    }

    class var sharedInstance : contactsDataClass {
        dispatch_once(&Static.onceToken){
            Static.instance = contactsDataClass()
        }
        return Static.instance!
    }      

}
您已经创建了无限递归 影响这个街区

class var sharedInstance : contactsDataClass {
    dispatch_once(&Static.onceToken){
        Static.instance = contactsDataClass()
    }
    return Static.instance!
}
这叫什么

init() {
    print("get to init")
    contactsDataClass.sharedInstance.localContacts.append(contact(originalNumber: "0525222022", name: "try appent"))
    print("init pass")    
} 
它再次调用第一个块

让我们清理一下你的代码 正如您所见,在Swift中定义单例类比在Objective-C中容易得多

您只需隐藏默认的
初始值设定项
,并创建
静态
常量
共享状态
,如上所示

用法
但是我得到了同样的结果。它写了两次“get to init”并卡住了。为什么它写了两次“get to init”@NirTzin:我完全删除了“get to init”这段文字,怎么可能呢?请使用我的代码。我添加它只是为了test@NirTzin:请告诉我您现在使用的代码。我怀疑你修改了更多的代码…为什么这个问题被否决了?
public class Contact {
    var originalNumber: String
    var e164Number = ""
    var contactImage = ""
    var name: String

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

class ContactManager {
    static let sharedInstance = ContactManager()
    private init() {}
    var adbk : ABAddressBook! // this is dangerous...
    var contacts = [Contact]()
}
ContactManager.sharedInstance.contacts.append(Contact(originalNumber: "0525222022", name: "Test name"))

print(ContactManager.sharedInstance.contacts[0].name) // "Test name"