Преобразовать словарь addressComponents NSTextCheckingResult в строку с DataDetector в Objective-C - PullRequest
0 голосов
/ 03 декабря 2018

Яблоки NSDataDetector могут обнаруживать различные вещи, такие как адреса, даты и URL-адреса как NSTextCheckingResults.Для адресов он записывает информацию в словарь с большим количеством ключей, представляющих такие элементы адреса, как адрес, город, штат и почтовый индекс. Вот различные ключи.

Моя проблема в том, что я слабо использую словари и не могу понять синтаксис для преобразования словаря обратно в обычную строку.Мне нужна строка, чтобы я мог передать ее в запросе карт на естественном языке.

Может кто-нибудь предложить синтаксис для преобразования словаря в строку.

Вот код, который я использую дляопределить словарь.

 NSDictionary* addrDict= nil;
    NSString *addr = nil;
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:(NSTextCheckingTypes)NSTextCheckingTypeAddress error:&error];

    NSArray *matches = [detector matchesInString:string
                                         options:0
                                           range:NSMakeRange(0, [string length])];

    NSLocale* currentLoc = [NSLocale currentLocale];

    for (NSTextCheckingResult *match in matches) {
        if ([match resultType] == NSTextCheckingTypeAddress) {

            addrDict = [match addressComponents];
//How do I convert this dictionary back into a string that says something like 
         Starbucks 123 Main Street Mountain View CA 94103  
        }

    }

1 Ответ

0 голосов
/ 03 декабря 2018

NSTextCheckingResult имеет свойство range, которое вы можете использовать:

Это должно помочь:

NSRange addressMatchRange = [match range];
NSString *matchString = [string substringWithRange:addressMatchRange];

Если вы хотите получить if из словаря: addrDict[NSTextCheckingZIPKey] даст вам 94103, addrDict[NSTextCheckingStateKey] даст вам CA и т. д., и вам придется его реконструировать, но тогда порядок остается за вами.

...