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)
}
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))
}
}
}

View File

@ -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.

View File

@ -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