使用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")
}
感谢Kumar,正则表达式肯定是一种正确而有效的方式来比较整数值与范围! –
@tamás-zahola ..欢迎... –
@tamás-zahola,我为您优化了代码..现在就试试.. –