他在那里,我有一个带有文件和文件夹的简单树结构。它是可以下载虚拟文件夹的客户端-服务器应用程序的一部分。无论如何,我喜欢使用 ^blocks 进行异步编程。我有 3 个 url,第一个下载文件夹描述,第二个用于下载文件,第三个用于下载文件夹内容。DSFolder 是文件夹描述,DSFile 继承自 DSFolder 并包含下载结果的 NSData 字段。文件夹下载代码如下:
- (void)loadFolderData:(DSFolder *)folder
finished:(void(^)(DSFolder *))finished
error:(void(^)(NSError *))error {
if (!folder) {
return;
}
for (DSFolder* fileOrFolder in folder.children) {
if ([fileOrFolder isFolder]) {
[self loadFolderData:fileOrFolder
finished:^(DSFolder * folder) {
// *********************************
// Next folder level would be a copy
// of the whole for loop in here
// *********************************
} error:^(NSError * err) {
if (error) {
error(err);
}
}];
} else {
[self loadFile:fileOrFolder.name
folder:folder.name
finished:^(NSData * data) {
((DSFile *) fileOrFolder).data = data;
} error:^(NSError * err) {
if (error) {
error(err);
}
}];
}
}
}
好吧,我可以通过将循环复制几次来限制树级别的深度,但这看起来很丑陋。我希望这个问题是合理的。