我最近刚从 ASIHttpRequest 库切换到 AFNetworking。我真的很喜欢这种简单性,但我仍然在努力理解如何构建我的异步代码。
请考虑此注册方案。
- 首先,我想检查输入的电子邮件地址是否可用。
- 接下来我要检查输入的用户名是否可用。
- 如果以上两者都有效且可用,我想提交我的真实注册请求。
我的代码看起来像。
- (void)signUp{
BOOL hasValidEmail = [self validateEmail:email];
BOOL hasValidUsername = [self validateUsername:username];
if(!hasValidEmail){
NSLog(@"Invalid email");
return;
}
if(!hasValidUsername){
NSLog(@"Invalid username");
return;
}
if (hasValidEmail && hasValidUsername) {
NSLog(@"Go ahead and create account");
}
}
考虑到我的网络方法的异步性质,我不太确定如何构建它。通常会在前两次可用性检查收到响应之前达到最后一个条件。
可用性检查方法如下所示:
- (BOOL)validateEmail:(NSString*)email{
__block NSString* emailAlreadyExists = @"";
NSString* url = [NSString stringWithFormat:@"user/emailexists/%@", email];
[[APIClient sharedClient] getPath:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
emailAlreadyExists = [responseObject valueForKey:@"exists"];
} failure:^(AFHTTPRequestOperation *operation, NSError* error) {
NSLog(@"Email availability check failed: %@", error.localizedDescription);
}];
if([emailAlreadyExists isEqualToString:@"true"]){
return NO;
}
return YES;
}
也许只是我的积木技能需要提高,但我真的很想听听您将如何构建这样的场景?
虽然代码示例会“不错”,但我真的在寻找您知道的模式或好的技术。
谢谢。