Проанализируйте путь NSURL и запрос на iOS

Есть ли какие-либо стандартные объекты или функции для парсинга компонентов NSURL? Очевидно я мог записать один, но почему изобретают велосипед?

[NSURL path] возвратится NSString как "argX=x&argY=y&argZ=z" То, что я возвратил бы, является словарем, заполненным с {@"argX" => @"x", @"argY" => @"y", @"argZ" = @"z"}

Для пути, который возвращает строку как "/partA/partB/partC", я получил бы массив со структурой {[0] => @"partA", [1] => @"partB", [2] => @"partC"}

Я понимаю, что это - довольно определенное, спрашивают, но это кажется на что-то, что много людей хотело бы.

Это для iOS! По-видимому, NSURL имеет различные функции на macOS.

12
задан Cœur 28 May 2019 в 11:54
поделиться

3 ответа

Вы можете посмотреть на pathComponents, который возвращает массив компонентов URL. Дополнительную информацию можно получить здесь .

.
10
ответ дан 2 December 2019 в 03:32
поделиться

Хорошо, я получил antsy и написал решение для расширения NSString через Categories. Я еще не проверил это, но если вы хотите использовать его, вперед.

@interface NSString (ParseCategory)
- (NSMutableDictionary *)explodeToDictionaryInnerGlue:(NSString *)innerGlue outterGlue:(NSString *)outterGlue;
@end

@implementation NSString (ParseCategory)

- (NSMutableDictionary *)explodeToDictionaryInnerGlue:(NSString *)innerGlue outterGlue:(NSString *)outterGlue {
    // Explode based on outter glue
    NSArray *firstExplode = [self componentsSeparatedByString:outterGlue];
    NSArray *secondExplode;

    // Explode based on inner glue
    NSInteger count = [firstExplode count];
    NSMutableDictionary *returnDictionary = [NSMutableDictionary dictionaryWithCapacity:count];
    for (NSInteger i = 0; i < count; i++) {
        secondExplode = [(NSString *)[firstExplode objectAtIndex:i] componentsSeparatedByString:innerGlue];
        if ([secondExplode count] == 2) {
            [returnDictionary setObject:[secondExplode objectAtIndex:1] forKey:[secondExplode objectAtIndex:0]];
        }
    }

    return returnDictionary;
}

@end

Это называется так:

NSMutableDictionary *parsedQuery = [[myNSURL query] explodeToDictionaryInnerGlue:@"=" outterGlue=@"&"]

Для разбора пути часть NSURL (т.е. @"/партия/партб/партС"), просто позвоните это:

NSArray *parsedPath = [[nyNSURL path] componentsSeperatedByString:@"/"];

Имейте в виду, что parsedPath[0] будет пустая строка из-за ведущих /!

EDIT - Вот расширение категории NSURL для вашего удовольствия использования. Он снимает начальные "/", чтобы у вас нет пустого 0 индекс.

@implementation NSURL (ParseCategory)

- (NSArray *)pathArray {
    // Create a character set for the slash character
    NSRange slashRange;
    slashRange.location = (unsigned int)'/';
    slashRange.length = 1;
    NSCharacterSet *slashSet = [NSCharacterSet characterSetWithRange:slashRange];

    // Get path with leading (and trailing) slashes removed
    NSString *path = [[self path] stringByTrimmingCharactersInSet:slashSet];

    return [path componentsSeparatedByCharactersInSet:slashSet];
}

- (NSDictionary *)queryDictionary {
    NSDictionary *returnDictionary = [[[[self query] explodeToDictionaryInnerGlue:@"=" outterGlue:@"&"] copy] autorelease];
    return returnDictionary;
}

@end
12
ответ дан 2 December 2019 в 03:32
поделиться

Если Вы все-таки решили написать (Я не уверен, что существуют способы получения нужных Вам компонентов), то, возможно, Вы захотите использовать компоненты NSString's -SeparatedByString.

2
ответ дан 2 December 2019 в 03:32
поделиться