Итак, я пишу приложение, которое должно получить файловую структуру через сокет от серверного приложения (которое я также контролирую). Мой клиент находится в target-c, и ему нужно будет создать массив объектов «File». Я подумал, что рекурсия будет хорошим способом для этого, но я знаю, что моя реализация неверна.
Вот мое оригинальное мышление:
Я планировал использовать синтаксис, чтобы сообщить клиенту, есть ли у узла какие-либо дочерние элементы (например, папка) или это был лист (например, файл). Я также подумал о наличии синтаксиса «lastleaf» для последнего листа, чтобы остановить рекурсию. Синтаксис будет "тип: путь / к / файлу". Вот грубый алгоритм, который я придумал:
NSString* string = [self getStringFromSocket];
NSArray* split = [string componentsSeparatedByString:@":"];
if( [@"lastleaf" isEqualToString:[split objectAtIndex:0]] ) {
MyFile* newFile = [[MyFile alloc] initWithPath:[split subarrayWithRange:NSMakeRange(1, [split count]-1)]];
return [[NSMutableArray alloc] initWithObjects:newFile, nil];
} else if([@"leaf" isEqualToString:[split objectAtIndex:0]]) {
MyFile* newFile = [[MyFile alloc] initWithPath:[split subarrayWithRange:NSMakeRange(1, [split count]-1)]];
NSMutableArray* children = [[NSMutableArray alloc] initWithObjects:newFile, nil];
[children addObjectsFromArray: [self getFiles]];
return children;
} else if([@"parent" isEqualToString:[split objectAtIndex:0]]) {
MyFile* newFile = [[MyFile alloc] initWithPath:[split subarrayWithRange:NSMakeRange(1, [split count]-1)]];
[newFile setSubfiles: [self getFiles]];
return [[NSMutableArray alloc] initWithObjects:newFile, nil];
}
}
Я рад за всех, кто игнорирует это и имеет дело с псевдокодом, это было только мое ошибочное мышление о том, чтобы что-то делать.
Буду признателен за любые предложения или помощь.
Редактировать: я хочу видеть только путь к файлам и их структуру, а не содержимое