fix socketio/socket.io-client-swift#133 can't expose variadics to objective-c

This commit is contained in:
Erik 2015-08-03 12:41:14 -04:00
parent 2579c04f67
commit 06e2311acc
3 changed files with 27 additions and 3 deletions

View File

@ -29,19 +29,34 @@ private func emitAckCallback(socket: SocketIOClient?, num: Int?)
socket?.emitAck(num ?? -1, withData: items) 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 { struct SocketEventHandler {
let event: String let event: String
let callback: NormalCallback let callback: NormalCallback?
let callBackObjectiveC: NormalCallbackObjectiveC?
init(event: String, callback: NormalCallback) { init(event: String, callback: NormalCallback) {
self.event = event self.event = event
self.callback = callback 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) { withSocket socket: SocketIOClient? = nil) {
dispatch_async(dispatch_get_main_queue()) { 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))
} }
} }
} }

View File

@ -427,6 +427,13 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
handlers.append(handler) 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. Removes all handlers.
Can be used after disconnecting to break any potential remaining retain cycles. Can be used after disconnecting to break any potential remaining retain cycles.

View File

@ -26,5 +26,7 @@ import Foundation
public typealias AckCallback = (NSArray?) -> Void public typealias AckCallback = (NSArray?) -> Void
public typealias AckEmitter = (AnyObject...) -> Void public typealias AckEmitter = (AnyObject...) -> Void
public typealias AckEmitterObjectiveC = (NSArray) -> Void
public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void
public typealias NormalCallbackObjectiveC = (NSArray?, AckEmitterObjectiveC?) -> Void
public typealias OnAckCallback = (timeoutAfter: UInt64, callback: AckCallback) -> Void public typealias OnAckCallback = (timeoutAfter: UInt64, callback: AckCallback) -> Void