こんにちは、私はこのライブラリを使用していますが、関数を見つけました:
- (void) queueRequest:(NSString*)urlPath completion:(void(^)(NSData*))completionWithDownloadedData;
シンプルを渡そうとするNSData *data;
と、エラーがスローされます。実際にはどういう意味(void(^)(NSData*))
ですか? 見るのは初めてです。
どうもありがとう。
こんにちは、私はこのライブラリを使用していますが、関数を見つけました:
- (void) queueRequest:(NSString*)urlPath completion:(void(^)(NSData*))completionWithDownloadedData;
シンプルを渡そうとするNSData *data;
と、エラーがスローされます。実際にはどういう意味(void(^)(NSData*))
ですか? 見るのは初めてです。
どうもありがとう。
(void(^)(NSData*))
コード ブロックを宣言します。この方法で関数を呼び出すことができます。
[obj queueRequest:urlPath completion:^(NSData* data){
/* some code */
}];
data
は、操作できるブロックへのパラメーターです。このブロックは、queueRequest が完了すると、非同期的に呼び出されます。
インターフェースは非同期です。つまり、データは後でしか利用できません。これは、メソッドが単純に を返すことができないことを意味しますNSData*
(常にブロックせずに、これは非現実的です)。この問題は最近ではブロックで解決されることが多く、ここでの完了引数はNSData*
引数を取り、 を返すブロックですvoid
。このようなメソッドを呼び出す方法は次のとおりです。
[foo queueRequest:path completion:^(NSData *receivedData) {
NSLog(@"Received data: %@", receivedData);
}];
呼び出しはすぐに返され、データが利用可能になった後でブロックが実行されます。
NSData
オブジェクトを唯一の引数として受け取り、何も返さないブロックです。
Apple のBlocks Programming Topicsを参照してください。