diff --git a/SwiftIO/SocketEvent.swift b/SwiftIO/SocketEvent.swift index 679044b..729b959 100644 --- a/SwiftIO/SocketEvent.swift +++ b/SwiftIO/SocketEvent.swift @@ -33,7 +33,7 @@ class SocketEvent { init(event:String, args:AnyObject?, placeholders:Int = 0) { self.event = event - self.args = args? + self.args = args self.placeholders = placeholders } @@ -89,7 +89,7 @@ class SocketEvent { options: NSJSONWritingOptions(0), error: &jsonSendError) let jsonString = NSString(data: jsonSend!, encoding: NSUTF8StringEncoding) - message += jsonString! + message += jsonString! as! String continue } @@ -132,7 +132,7 @@ class SocketEvent { var newDict = [String: AnyObject]() for (key, value) in dict { - newDict[key as String] = value + newDict[key as! String] = value // If the value is a string we need to check // if it is a placeholder for data @@ -140,14 +140,14 @@ class SocketEvent { let mut = RegexMutable(str) if let num = mut["~~(\\d)"].groups() { - newDict[key as String] = self.datas[num[1].toInt()!] + newDict[key as! String] = self.datas[num[1].toInt()!] } else { - newDict[key as String] = str + newDict[key as! String] = str } } else if let nestDict = value as? NSDictionary { - newDict[key as String] = self.fillInDict(nestDict) + newDict[key as! String] = self.fillInDict(nestDict) } else if let arr = value as? NSArray { - newDict[key as String] = self.fillInArray(arr) + newDict[key as! String] = self.fillInArray(arr) } } @@ -158,7 +158,7 @@ class SocketEvent { if let dict = args as? NSDictionary { return self.fillInDict(dict) } else if let arr = args as? NSArray { - return self.fillInArray(args as NSArray) + return self.fillInArray(args as! NSArray) } else if let string = args as? String { if string == "~~\(self.currentPlace)" { return self.datas[0] diff --git a/SwiftIO/SocketEventHandler.swift b/SwiftIO/SocketEventHandler.swift index 8a77b1f..782396e 100644 --- a/SwiftIO/SocketEventHandler.swift +++ b/SwiftIO/SocketEventHandler.swift @@ -31,11 +31,13 @@ class SocketEventHandler { init(event:String, callback:NormalCallback) { self.event = event self.callback = callback + self.callbackMult = nil } init(event:String, callback:MultipleCallback) { self.event = event self.callbackMult = callback + self.callback = nil self.multiEvent = true } diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 8c607f4..55e688a 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -28,8 +28,8 @@ typealias NormalCallback = (AnyObject?) -> Void typealias MultipleCallback = (NSArray?) -> Void class SocketIOClient: NSObject, SRWebSocketDelegate { - let socketURL:String! - private let secure:Bool! + let socketURL:NSMutableString! + private var secure = false private var handlers = [SocketEventHandler]() private var lastSocketMessage:SocketEvent? private var pingTimer:NSTimer! @@ -45,7 +45,6 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { var sid:String? init(socketURL:String, opts:[String: AnyObject]? = nil) { - super.init() var mutURL = RegexMutable(socketURL) if mutURL["https://"].matches().count != 0 { @@ -55,6 +54,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { } mutURL = mutURL["http://"] ~= "" mutURL = mutURL["https://"] ~= "" + self.socketURL = mutURL // Set options @@ -96,7 +96,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { self.closed = false var endpoint:String - if self.secure! { + if self.secure { endpoint = "wss://\(self.socketURL)/socket.io/?EIO=2&transport=websocket" } else { endpoint = "ws://\(self.socketURL)/socket.io/?EIO=2&transport=websocket" @@ -197,7 +197,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { for handler in self.handlers { if handler.event == event { if data is NSArray { - handler.executeCallback(nil, items: (data as NSArray)) + handler.executeCallback(nil, items: (data as! NSArray)) } else { handler.executeCallback(data) } @@ -241,7 +241,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { for g in 0..() +var swiftRegexCache = [String: NSRegularExpression]() public class SwiftRegex: NSObject, BooleanType { @@ -60,15 +60,15 @@ public class SwiftRegex: NSObject, BooleanType { } public func range(options: NSMatchingOptions = nil) -> NSRange { - return regex.rangeOfFirstMatchInString(target, options: nil, range: targetRange) + return regex.rangeOfFirstMatchInString(target as! String, options: nil, range: targetRange) } public func match(options: NSMatchingOptions = nil) -> String! { - return substring(range(options: options)) + return substring(range(options: options)) as! String } public func groups(options: NSMatchingOptions = nil) -> [String]! { - return groupsForMatch( regex.firstMatchInString(target, options: options, range: targetRange) ) + return groupsForMatch( regex.firstMatchInString(target as! String, options: options, range: targetRange) ) } func groupsForMatch(match: NSTextCheckingResult!) -> [String]! { @@ -95,7 +95,7 @@ public class SwiftRegex: NSObject, BooleanType { if let mutableTarget = target as? NSMutableString { for match in matchResults().reverse() { let replacement = regex.replacementStringForResult( match, - inString: target, offset: 0, template: newValue ) + inString: target as! String, offset: 0, template: newValue ) mutableTarget.replaceCharactersInRange(match.rangeAtIndex(groupno), withString: replacement) } } else { @@ -105,7 +105,7 @@ public class SwiftRegex: NSObject, BooleanType { } func matchResults(options: NSMatchingOptions = nil) -> [NSTextCheckingResult] { - return regex.matchesInString(target, options: options, range: targetRange) as [NSTextCheckingResult] + return regex.matchesInString(target as! String, options: options, range: targetRange) as! [NSTextCheckingResult] } public func ranges(options: NSMatchingOptions = nil) -> [NSRange] { @@ -113,7 +113,14 @@ public class SwiftRegex: NSObject, BooleanType { } public func matches(options: NSMatchingOptions = nil) -> [String] { - return matchResults(options: options).map { self.substring($0.range) } + var returnStr = [String]() + var t = matchResults(options: options).map { self.substring($0.range) } + + for str in t { + returnStr.append(str as! String) + } + + return returnStr } public func allGroups(options: NSMatchingOptions = nil) -> [[String]] { @@ -123,8 +130,8 @@ public class SwiftRegex: NSObject, BooleanType { public func dictionary(options: NSMatchingOptions = nil) -> Dictionary { var out = Dictionary() for match in matchResults(options: options) { - out[substring(match.rangeAtIndex(1))] = - substring(match.rangeAtIndex(2)) + out[substring(match.rangeAtIndex(1)) as! String] = + substring(match.rangeAtIndex(2)) as? String } return out } @@ -134,19 +141,24 @@ public class SwiftRegex: NSObject, BooleanType { let out = NSMutableString() var pos = 0 - regex.enumerateMatchesInString(target, options: options, range: targetRange ) { + regex.enumerateMatchesInString(target as! String, options: options, range: targetRange ) { (match: NSTextCheckingResult!, flags: NSMatchingFlags, stop: UnsafeMutablePointer) in let matchRange = match.range - out.appendString( self.substring( NSRange(location:pos, length:matchRange.location-pos) ) ) + out.appendString( self.substring( NSRange(location:pos, length:matchRange.location-pos) ) as! String ) out.appendString( substitution(match, stop) ) pos = matchRange.location + matchRange.length } - out.appendString( substring( NSRange(location:pos, length:targetRange.length-pos) ) ) + out.appendString( substring( NSRange(location:pos, length:targetRange.length-pos) ) as! String ) if let mutableTarget = target as? NSMutableString { - mutableTarget.setString(out) + var str = "" + for char in out as String { + str += String(char) + } + + mutableTarget.setString(str) return mutableTarget } else { SwiftRegex.failure("Modify on non-mutable") @@ -208,43 +220,41 @@ extension String { } public func RegexMutable(string: NSString) -> NSMutableString { - return NSMutableString(string:string) + return NSMutableString(string:string as! String) } public func ~= (left: SwiftRegex, right: String) -> NSMutableString { - return left.substituteMatches { - (match: NSTextCheckingResult, stop: UnsafeMutablePointer) in + return left.substituteMatches({match, stop in return left.regex.replacementStringForResult( match, - inString: left.target, offset: 0, template: right ) - } + inString: left.target as! String, offset: 0, template: right ) + }, options: nil) } public func ~= (left: SwiftRegex, right: [String]) -> NSMutableString { var matchNumber = 0 - return left.substituteMatches { - (match: NSTextCheckingResult, stop: UnsafeMutablePointer) in + return left.substituteMatches({match, stop -> String in if ++matchNumber == right.count { stop.memory = true } return left.regex.replacementStringForResult( match, - inString: left.target, offset: 0, template: right[matchNumber-1] ) - } + inString: left.target as! String, offset: 0, template: right[matchNumber-1] ) + }, options: nil) } public func ~= (left: SwiftRegex, right: (String) -> String) -> NSMutableString { - return left.substituteMatches { - (match: NSTextCheckingResult, stop: UnsafeMutablePointer) in - return right(left.substring(match.range)) - } + // return right(left.substring(match.range)) + return left.substituteMatches( + {match, stop -> String in + right(left.substring(match.range) as! String) + }, options: nil) } public func ~= (left: SwiftRegex, right: ([String]) -> String) -> NSMutableString { - return left.substituteMatches { - (match: NSTextCheckingResult, stop: UnsafeMutablePointer) in + return left.substituteMatches({match, stop -> String in return right(left.groupsForMatch(match)) - } + }, options: nil) } // my take on custom threading operators from