From 222f622d3a3f892c53ff138464c797f783c821cf Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 7 Sep 2015 21:29:51 +0200 Subject: [PATCH] use optionals instead of try/catch --- .../project.pbxproj | 12 ++-- ...tParser.swift => SocketGenericParser.swift | 2 +- SocketIO-iOSTests/SocketParserTest.swift | 28 ++++----- SocketIOClientSwift/SocketParser.swift | 60 ++++++++----------- 4 files changed, 44 insertions(+), 58 deletions(-) rename GenericSocketParser.swift => SocketGenericParser.swift (98%) diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index d49cac7..3800e67 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -43,8 +43,8 @@ 74781D5C1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */; }; 74781D5D1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */; }; 941A4ABA1B67A56C00C42318 /* TestKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941A4AB91B67A56C00C42318 /* TestKind.swift */; }; - 9421F5D01B9DBF5900D625BB /* GenericSocketParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9421F5CF1B9DBF5900D625BB /* GenericSocketParser.swift */; settings = {ASSET_TAGS = (); }; }; - 9421F5D11B9DBF5900D625BB /* GenericSocketParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9421F5CF1B9DBF5900D625BB /* GenericSocketParser.swift */; settings = {ASSET_TAGS = (); }; }; + 9421F5D01B9DBF5900D625BB /* SocketGenericParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9421F5CF1B9DBF5900D625BB /* SocketGenericParser.swift */; settings = {ASSET_TAGS = (); }; }; + 9421F5D11B9DBF5900D625BB /* SocketGenericParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9421F5CF1B9DBF5900D625BB /* SocketGenericParser.swift */; settings = {ASSET_TAGS = (); }; }; 94242BB81B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */; }; 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7C1B51F254004FF46E /* SocketAckManager.swift */; }; 945B65361B5FCEEA0081E995 /* SocketAnyEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7D1B51F254004FF46E /* SocketAnyEvent.swift */; }; @@ -112,7 +112,7 @@ 5764DF881B51F254004FF46E /* WebSocket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = SocketIOClientSwift/WebSocket.swift; sourceTree = ""; }; 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketIOClientStatus.swift; path = SocketIOClientSwift/SocketIOClientStatus.swift; sourceTree = ""; }; 941A4AB91B67A56C00C42318 /* TestKind.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestKind.swift; sourceTree = ""; }; - 9421F5CF1B9DBF5900D625BB /* GenericSocketParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GenericSocketParser.swift; sourceTree = ""; }; + 9421F5CF1B9DBF5900D625BB /* SocketGenericParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketGenericParser.swift; sourceTree = ""; }; 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespaceAcknowledgementTest.swift; sourceTree = ""; }; 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketEmitTest.swift; sourceTree = ""; }; 949FAE8C1B9B94E600073BE9 /* SocketParserTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketParserTest.swift; sourceTree = ""; }; @@ -270,7 +270,7 @@ 5764DF831B51F254004FF46E /* SocketLogger.swift */, 5764DF841B51F254004FF46E /* SocketPacket.swift */, 5764DF851B51F254004FF46E /* SocketParser.swift */, - 9421F5CF1B9DBF5900D625BB /* GenericSocketParser.swift */, + 9421F5CF1B9DBF5900D625BB /* SocketGenericParser.swift */, 5764DF861B51F254004FF46E /* SocketTypes.swift */, 5764DF871B51F254004FF46E /* SwiftRegex.swift */, 5764DF881B51F254004FF46E /* WebSocket.swift */, @@ -458,7 +458,7 @@ 5764DF911B51F254004FF46E /* SocketEventHandler.swift in Sources */, 5764DF931B51F254004FF46E /* SocketFixUTF8.swift in Sources */, 5764DF951B51F254004FF46E /* SocketIOClient.swift in Sources */, - 9421F5D01B9DBF5900D625BB /* GenericSocketParser.swift in Sources */, + 9421F5D01B9DBF5900D625BB /* SocketGenericParser.swift in Sources */, 5764DF8B1B51F254004FF46E /* SocketAnyEvent.swift in Sources */, 5764DF971B51F254004FF46E /* SocketLogger.swift in Sources */, 74781D5A1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */, @@ -480,7 +480,7 @@ 94CB8F0B1B6E48B90019ED53 /* SocketTestCases.swift in Sources */, 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, - 9421F5D11B9DBF5900D625BB /* GenericSocketParser.swift in Sources */, + 9421F5D11B9DBF5900D625BB /* SocketGenericParser.swift in Sources */, 941A4ABA1B67A56C00C42318 /* TestKind.swift in Sources */, 94CB8F0D1B6E66E60019ED53 /* AbstractSocketTest.swift in Sources */, 945B65431B63D9DB0081E995 /* SocketEmitTest.swift in Sources */, diff --git a/GenericSocketParser.swift b/SocketGenericParser.swift similarity index 98% rename from GenericSocketParser.swift rename to SocketGenericParser.swift index 04b25ae..0320084 100644 --- a/GenericSocketParser.swift +++ b/SocketGenericParser.swift @@ -8,7 +8,7 @@ import Foundation -struct GenericSocketParser { +struct SocketGenericParser { let message: String var currentIndex: Int var messageCharacters: [Character] { diff --git a/SocketIO-iOSTests/SocketParserTest.swift b/SocketIO-iOSTests/SocketParserTest.swift index e4f7a1a..7198b4c 100644 --- a/SocketIO-iOSTests/SocketParserTest.swift +++ b/SocketIO-iOSTests/SocketParserTest.swift @@ -68,39 +68,37 @@ class SocketParserTest: XCTestCase { func testInvalidInput() { let message = "8" - do { - try SocketParser.parseString(message) - XCTFail("Should throw exeption") - } catch { - - } + XCTAssertNil(SocketParser.parseString(message)) } func testGenericParser() { - var parser = GenericSocketParser(message: "61-/swift,", currentIndex: 0) + var parser = SocketGenericParser(message: "61-/swift,", currentIndex: 0) XCTAssertEqual(parser.read(1), "6") XCTAssertEqual(parser.currentCharacter, "1") XCTAssertEqual(parser.readUntilStringOccurence("-"), "1") XCTAssertEqual(parser.currentCharacter, "-") - } func validateParseResult(message:String) { let validValues = SocketParserTest.packetTypes[message]! - let packet = try! SocketParser.parseString(message) + let packet = SocketParser.parseString(message) let type = message.substringWithRange(Range(start: message.startIndex, end: message.startIndex.advancedBy(1))) - XCTAssertEqual(packet.type, SocketPacket.PacketType(str:type)!) - XCTAssertEqual(packet.nsp, validValues.0) - XCTAssertTrue((packet.data as NSArray).isEqualToArray(validValues.1)) - XCTAssertTrue((packet.binary as NSArray).isEqualToArray(validValues.2)) - XCTAssertEqual(packet.id, validValues.3) + if let packet = packet { + XCTAssertEqual(packet.type, SocketPacket.PacketType(str:type)!) + XCTAssertEqual(packet.nsp, validValues.0) + XCTAssertTrue((packet.data as NSArray).isEqualToArray(validValues.1)) + XCTAssertTrue((packet.binary as NSArray).isEqualToArray(validValues.2)) + XCTAssertEqual(packet.id, validValues.3) + }else { + XCTFail() + } } func testParsePerformance() { let keys = Array(SocketParserTest.packetTypes.keys) measureBlock({ for item in keys.enumerate() { - try! SocketParser.parseString(item.element) + SocketParser.parseString(item.element) } }) } diff --git a/SocketIOClientSwift/SocketParser.swift b/SocketIOClientSwift/SocketParser.swift index 59025e4..fc637a6 100644 --- a/SocketIOClientSwift/SocketParser.swift +++ b/SocketIOClientSwift/SocketParser.swift @@ -22,10 +22,6 @@ import Foundation -enum SocketParserError: ErrorType { - case InvalidMessageType, InvalidBinaryPalceholder -} - class SocketParser { private static func isCorrectNamespace(nsp: String, _ socket: SocketIOClient) -> Bool { @@ -61,11 +57,11 @@ class SocketParser { } // Translation of socket.io-client#decodeString - static func parseString(message: String) throws -> SocketPacket { - var parser = GenericSocketParser(message: message, currentIndex: 0) + static func parseString(message: String) -> SocketPacket? { + var parser = SocketGenericParser(message: message, currentIndex: 0) guard let typeString = parser.read(1), let type = SocketPacket.PacketType(str: typeString) else { - throw SocketParserError.InvalidMessageType + return nil } if parser.messageCharacters.count == 1 { @@ -80,7 +76,7 @@ class SocketParser { where parser.read(1)! == "-" { placeholders = holders } else { - throw SocketParserError.InvalidBinaryPalceholder + return nil } } if parser.currentCharacter == "/" { @@ -129,35 +125,27 @@ class SocketParser { Logger.log("Parsing %@", type: "SocketParser", args: message) - do { - let pack = try parseString(message) - Logger.log("Decoded packet as: %@", type: "SocketParser", args: pack.description) - - switch pack.type { - case .Event: - handleEvent(pack, socket: socket) - case .Ack: - handleAck(pack, socket: socket) - case .BinaryEvent: - handleBinary(pack, socket: socket) - case .BinaryAck: - handleBinary(pack, socket: socket) - case .Connect: - handleConnect(pack, socket: socket) - case .Disconnect: - socket.didDisconnect("Got Disconnect") - case .Error: - socket.didError("Error: \(pack.data)") - } - - }catch SocketParserError.InvalidBinaryPalceholder { - Logger.error("Parsed Invalid Binary Placeholder", type: "SocketParser") + guard let pack = parseString(message) else { + Logger.error("Parsing message", type: "SocketParser", args: message) + return } - catch SocketParserError.InvalidMessageType { - Logger.error("Parsed Invalid Binary Placeholder", type: "SocketParser") - } - catch { - + Logger.log("Decoded packet as: %@", type: "SocketParser", args: pack.description) + + switch pack.type { + case .Event: + handleEvent(pack, socket: socket) + case .Ack: + handleAck(pack, socket: socket) + case .BinaryEvent: + handleBinary(pack, socket: socket) + case .BinaryAck: + handleBinary(pack, socket: socket) + case .Connect: + handleConnect(pack, socket: socket) + case .Disconnect: + socket.didDisconnect("Got Disconnect") + case .Error: + socket.didError("Error: \(pack.data)") } }