我通过采用socket.IO-objc来编写单例类来访问套接字,这是我到目前为止所做的:
class Singleton_SocketManager: NSObject, SocketIODelegate {
var isSocketConnected: Bool = false
var socket: SocketIO
override init() {
super.init()
}
class var sharedInstance: Singleton_SocketManager {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: Singleton_SocketManager? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = Singleton_SocketManager()
}
return Static.instance!
}
}
然而编译器抱怨:
Property 'self.socket' not initialized at super.init call
我应该如何编写我的init方法以使编译错误消失?
顺便说一句,我从objective-c转换了上面的代码,在obj-c中,SocketIO被初始化为:
self.socket = [[SocketIO alloc] initWithDelegate:self];
如果我以这种方式放置init方法:
override init() {
self.socket = SocketIO(delegate: self)
super.init()
}
它抱怨道:
self used before super.init call
答案 0 :(得分:0)
引用Swift编程语言,它回答了你的问题:
“Swift的编译器执行四项有用的安全检查以确保 完成两阶段初始化没有错误:“
安全检查1“指定的初始化程序必须确保所有的 “它的类引入的属性在它之前被初始化 委托一个超类初始化程序。“
摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11
致谢:Ruben
上的this question另一种解决方案是制作“插座”。变量unwrapped optional。
var socket:IOSocket!
答案 1 :(得分:0)
您可以按照以下网址中的建议执行以下选项 Error in Swift class: Property not initialized at super.init call - How to initialize properties which need use of self in their initializer parameter var socket:SocketIO!