From 06e2311accc4c88834472384a4d0bd2c0a015acc Mon Sep 17 00:00:00 2001 From: Erik Date: Mon, 3 Aug 2015 12:41:14 -0400 Subject: [PATCH] fix socketio/socket.io-client-swift#133 can't expose variadics to objective-c --- SocketIOClientSwift/SocketEventHandler.swift | 21 +++++++++++++++++--- SocketIOClientSwift/SocketIOClient.swift | 7 +++++++ SocketIOClientSwift/SocketTypes.swift | 2 ++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/SocketIOClientSwift/SocketEventHandler.swift b/SocketIOClientSwift/SocketEventHandler.swift index 5b74cf4..f145600 100644 --- a/SocketIOClientSwift/SocketEventHandler.swift +++ b/SocketIOClientSwift/SocketEventHandler.swift @@ -29,19 +29,34 @@ private func emitAckCallback(socket: SocketIOClient?, num: Int?) socket?.emitAck(num ?? -1, withData: items) } +private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?) + (items: NSArray) -> Void { + socket?.emitAck(num ?? -1, withData: items as [AnyObject]) +} + struct SocketEventHandler { let event: String - let callback: NormalCallback + let callback: NormalCallback? + let callBackObjectiveC: NormalCallbackObjectiveC? init(event: String, callback: NormalCallback) { self.event = event self.callback = callback + self.callBackObjectiveC = nil } - func executeCallback(items: NSArray? = nil, withAck ack: Int? = nil, withAckType type: Int? = nil, + init(event: String, callback: NormalCallbackObjectiveC) { + self.event = event + self.callback = nil + self.callBackObjectiveC = callback + } + + func executeCallback(items: [AnyObject]? = nil, withAck ack: Int? = nil, withAckType type: Int? = nil, withSocket socket: SocketIOClient? = nil) { dispatch_async(dispatch_get_main_queue()) { - self.callback(items, emitAckCallback(socket, num: ack)) + self.callback != nil ? + self.callback?(items, emitAckCallback(socket, num: ack)) + : self.callBackObjectiveC?(items, emitAckCallbackObjectiveC(socket, num: ack)) } } } diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 7ced5d0..e664193 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -426,6 +426,13 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient let handler = SocketEventHandler(event: event, callback: callback) handlers.append(handler) } + + public func onObjectiveC(event: String, callback: NormalCallbackObjectiveC) { + SocketLogger.log("Adding handler for event: %@", client: self, args: event) + + let handler = SocketEventHandler(event: event, callback: callback) + handlers.append(handler) + } /** Removes all handlers. diff --git a/SocketIOClientSwift/SocketTypes.swift b/SocketIOClientSwift/SocketTypes.swift index 674e699..342564c 100644 --- a/SocketIOClientSwift/SocketTypes.swift +++ b/SocketIOClientSwift/SocketTypes.swift @@ -26,5 +26,7 @@ import Foundation public typealias AckCallback = (NSArray?) -> Void public typealias AckEmitter = (AnyObject...) -> Void +public typealias AckEmitterObjectiveC = (NSArray) -> Void public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void +public typealias NormalCallbackObjectiveC = (NSArray?, AckEmitterObjectiveC?) -> Void public typealias OnAckCallback = (timeoutAfter: UInt64, callback: AckCallback) -> Void