使用statusCode处理错误

问题描述:

我想检查statusCode是否等于2xx,但是我不太清楚如何为这种类型的错误处理创建这个正则表达式代码。这是我的代码在这个时候与一个变量,从头检索statusCode?使用statusCode处理错误

func SignUpWithPassword(email: String, password: String, delegate: CreateUserDelegate) { 

    testProvider.request(.SignIn(email, password), completion: { result in 
     switch result { 
     case let .Success(response): 

      let statusCode = response.statusCode 

     case let .Failure(error): 
      print(error) 
      let description = "Error! Please try again!" 
      delegate.CreateUser(didError: description) 
     } 
    }) 

    delegate.CreateUser(didSucceed: SignUpUser(email: email, password: password)) 
} 

我相信NSHTTPURLResponse状态码是一个Int。 你应该能够使用您的分支逻辑上这是一个远程的表达:

switch response.statusCode 
    { 
    case 200 ... 299 : 
     print("Success") 
    default: 
     print("Failure") 
    } 

我使用这个枚举:

enum HTTPStatusCodeGroup: Int { 
    case Info = 100 
    case Success = 200 
    case Redirect = 300 
    case Client = 400 
    case Server = 500 
    case Unknown = 999 

    init(code: Int) { 
     switch code { 
      case 100...199: self = .Info 
      case 200...299: self = .Success 
      case 300...399: self = .Redirect 
      case 400...499: self = .Client 
      case 500...599: self = .Server 
      default: self = .Unknown 
     } 
    } 
} 

在斯威夫特,我创建了自己的Regax类。

// Custom Regex class 
    class Regex { 
     let internalExpression: NSRegularExpression 
     let pattern: String 

     init(_ pattern: String) { 
      self.pattern = pattern 
      do { 
       self.internalExpression = try NSRegularExpression(pattern: self.pattern, options: .CaseInsensitive) 
      } catch _ { 
       self.internalExpression = NSRegularExpression.init(); 
      } 
     } 

     func test(input: String) -> Bool { 

      let matches = self.internalExpression.matchesInString(input, options: .WithTransparentBounds, range: NSMakeRange(0, input.characters.count)) as Array<NSTextCheckingResult> 

      return matches.count > 0 
     } 
    } 

    // Override operator 

    infix operator =~ {} 

    func =~ (input: NSInteger, pattern: String) -> Int { 
     return (Regex(pattern).test(String(input))) ? input : -1; 
    } 

    // Example add it viewDidLoad method 
    let statusCode = 200 
    switch statusCode 
    { 
    case statusCode =~ "2[0-9][0-9]" : 
     print("2[0-9][0-9] Success") 
     break 
    case statusCode =~ "3[0-9][0-9]" : 
     print("3[0-9][0-9] Success") 
     break 
    case statusCode =~ "4[0-9][0-9]" : 
     print("4[0-9][0-9] Success") 
     break 
    case statusCode =~ "5[0-9][0-9]" : 
     print("5[0-9][0-9] Success") 
     break 
    default: 
     print("Failure") 
    } 
+0

感谢Kumar,正则表达式肯定是一种正确而有效的方式来比较整数值与范围! –

+0

@tamás-zahola ..欢迎... –

+0

@tamás-zahola,我为您优化了代码..现在就试试.. –