我使用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初始值設定項。 –