私はiOSアプリケーションの開発を学んでいますが、今はObjective-Cソースコードを読んでいます。Objective-Cブロックは返されず、ブロック内で自己呼び出されますか?
これは、ユーザープロファイルを取得する方法です。
+ (void)getProfile:(void (^)(NSString *message))completion {
NSDictionary *dic = @{@"module":@"profile"};
[[self defaultManager] POST:KBaseUrl parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
if ([self jsonOKForResponseObject:responseObject] && [self checkLogin:responseObject]) {
[ProfileManager sharedInstance].rank = responseObject[@"Variables"][@"space"][@"group"][@"grouptitle"];
[ProfileManager sharedInstance].credit = responseObject[@"Variables"][@"space"][@"credits"];
[ProfileManager sharedInstance].gender = responseObject[@"Variables"][@"space"][@"gender"];
completion(nil);
} else {
completion(@"fail");
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
completion(@"fail");
}];
}
私の質問はブロックcompletion
です。
ブロックvoid
を返し、NSString
パラメータを受け取るとします。
ブロック内でcompletion(nil)
は何を意味しますか?
ブロックcompletion
はそれを自己呼び出しし、パラメータとしてnil
を送信することを意味しますか?
これは、パラメータのタイプと一致しませんNSString*
?
私はObjCのblock
についてよく知らないです。誰もヒントを与えることができますか?
はい、あなたは正しいです。自身を呼び出し、nilをパラメータとして送信し、NSStringパラメータと競合しません。 NSStringのパラメータにnilを渡すだけです。 –
FYI - 'completion(xxx)'へのすべての呼び出しは、 'if(completion)completion(xxx);'に変更する必要があります。これは、 'getProfile:'の呼び出しが 'nil'を' completion'パラメータに渡す場合に発生します。 – rmaddy
if(完了)を使用する理由は何ですか?もし条件付きで使用せずにnilをparamとして渡すと、どんな害が起こるのですか?@rmaddy –