Swift 无法创建单例
我想做一个联系簿,我做了一个类的联系 没有编译错误,但是当我运行init时,我没有进入“init”传递阶段 有什么问题吗 这是我的密码: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
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"