在看oc項(xiàng)目時(shí)候,不理解websocket是如何在一個(gè)控制器中寫邏輯,然后其他的控制器都收到,原來是在一個(gè)單例中使用了block,在其中一個(gè)控制器中制定收到websocket后的block邏輯,然后每次收到服務(wù)器發(fā)來的內(nèi)容就可以回調(diào)執(zhí)行這個(gè)block了。我們用swift來模擬這種模式。
首先,在單例中添加閉包屬性,不清楚閉包的可以搜一下,與oc中的block類似。
var myClosures:((String)->Void)!
然后,在這個(gè)單例類中添加各個(gè)閉包的getter和setter方法:
//MARK:- setter getter
func setMyClo(sample Closures : @escaping ((String) -> Void)) {
self.myClosures = Closures
}
func getMyClo(str: String) {
if self.myClosures != nil{
self.myClosures(str)
}
}
最后將自定義的閉包作為一個(gè)參數(shù)傳遞給setter就可以設(shè)定好myClosures屬性,調(diào)用getter就可以使用:
YxhClass.shareSingle().setMyClo { (a) in
print(a)
}
在需要的地方調(diào)用getter即可
YxhClass.shareSingle().getMyClo(str: "hello")
總結(jié):這里的getter可以寫在websocket的委托中,例如當(dāng)接收到websocket發(fā)來的消息時(shí)候執(zhí)行這個(gè)閉包,同樣setter中可以編寫收到數(shù)據(jù)后的業(yè)務(wù)邏輯,這里僅僅用打印代替。