我使用Socket.io库的实时功能添加到我的应用程序单的设计,和我使用Singleton设计懒VS初始化为迅速
import SocketIO
class SocketIOManager: NSObject {
static let sharedInstance = SocketIOManager()
var socket: SocketIOClient!
func establishConnection() {
socket = SocketIOClient(socketURL: URL(string: mainURL)!, config: [.log(false), .compress, .connectParams(["token": "asdasdasdsa"])])
socket.connect()
}
func closeConnection() {
socket.disconnect()
}
}
因此从技术上讲,只要我的应用程序加载up socket
不能为零,否则会崩溃。我发现了两个解决方案,可以解决这个问题
懒
lazy var socket = SocketIOClient(socketURL: URL(string: mainURL)!, config: [.log(false), .compress, .connectParams(["token": "asdasdasdsa"])])
通过使用这种方法socket
永远是零,因为它总是会被初始化。但这种方法的问题是,如果创建SocketIOClient不便宜,那么它将是一个很好的使用方法。
初始化()
class SocketIOManager: NSObject { static let sharedInstance = SocketIOManager() let socket: SocketIOClient! init() { super.init() socket = SocketIOClient(socketURL: URL(string: mainURL)!, config: [.log(false), .compress, .connectParams(["token": "asdasdasdsa"])]) } }
通过使用该方法,我有点困惑,因为我不最初创建SocketIOManager对象像
let socket = SocketIOManager()
因为如果我没有错误的套接字将被初始化,如果只有对象被创建,我不确定abou t在单例设计中使用init()
哪种方法适合我的用例?
我得到这个错误'属性'self.socket'没有初始化super.init调用' – airsoftFreak
'socket = SocketIOClient(soc ....'需要超过'super.init()',然后'编译:假设'SocketIOClient(socketURL:config)'不是failable初始值设定项。 –