2016-03-04 141 views
0

我想檢查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)) 
} 

回答

0

我相信NSHTTPURLResponse狀態碼是一個Int。 你應該能夠使用您的分支邏輯上這是一個遠程的表達:

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

我使用這個枚舉:

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

在斯威夫特,我創建了自己的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,我爲您優化了代碼..現在就試試.. –