diff --git a/README.md b/README.md index b1b281b..2efbf23 100644 --- a/README.md +++ b/README.md @@ -81,15 +81,19 @@ socket.on("jsonTest") {data in // Messages that have multiple items are passed // by an array socket.onMultipleItems("multipleItems") {data in - if let str = data[0] as? String { + if data == nil { + return + } + + if let str = data![0] as? String { println(str) } - if let arr = data[1] as? [Int] { + if let arr = data![1] as? [Int] { println(arr) } - if let obj = data[4] as? NSDictionary { + if let obj = data![4] as? NSDictionary { println(obj["test"]) } } diff --git a/SwiftIO/SocketEventHandler.swift b/SwiftIO/SocketEventHandler.swift index b65bef0..c3f4a57 100644 --- a/SwiftIO/SocketEventHandler.swift +++ b/SwiftIO/SocketEventHandler.swift @@ -24,8 +24,8 @@ class SocketEventHandler { let event:String! - let callback:NormalCallback! - let callbackMult:MultipleCallback! + let callback:NormalCallback? + let callbackMult:MultipleCallback? init(event:String, callback:NormalCallback) { self.event = event @@ -37,11 +37,19 @@ class SocketEventHandler { self.callbackMult = callback } - func executeCallback(item:AnyObject?) { - callback(item) - } - - func executeCallback(items:[AnyObject]) { - callbackMult(items) + func executeCallback(item:AnyObject?, multiple:Bool) { + if callback == nil || multiple { + if item != nil && item is NSArray { + callbackMult?(item as? NSArray) + } else { + if item != nil { + callbackMult?([item!]) + } else { + callbackMult?(nil) + } + } + } else { + callback?(item) + } } } \ No newline at end of file diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 3ef25b6..cc88dcf 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -25,7 +25,7 @@ import Foundation typealias NormalCallback = (AnyObject?) -> Void -typealias MultipleCallback = (AnyObject...) -> Void +typealias MultipleCallback = (NSArray?) -> Void class SocketIOClient: NSObject, SRWebSocketDelegate { let socketURL:String! @@ -188,12 +188,8 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { // println("Should do event: \(event) with data: \(data)") for handler in self.handlers { - if handler.event == event && !multipleItems { - handler.executeCallback(data) - } else if handler.event == event && multipleItems { - if let arr = data as? [AnyObject] { - handler.executeCallback(arr) - } + if handler.event == event { + handler.executeCallback(data, multiple: multipleItems) } } }