使用 Objective-C 中的 DataDetector 将 NSTextCheckingResult addressComponents 字典转换为字符串
Convert NSTextCheckingResult addressComponents dictionary to string with DataDetector in Objective-C
Apples NSDataDetector
可以像 NSTextCheckingResults
一样检测地址、日期和 URL 等各种信息。对于地址,它在字典中捕获信息,其中包含许多代表地址元素的键,例如地址、城市、州和邮政编码。 Here are the various keys.
我的问题是我不擅长使用字典,无法找出将字典转换回常规字符串的语法。我需要一个字符串,这样我就可以将它输入到地图的自然语言查询中。
任何人都可以建议将字典转换为字符串的语法。
这是我用来检测字典的代码。
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
}
}
NSTextCheckingResult
有一个 属性 range
可以使用:
这应该可以解决问题:
NSRange addressMatchRange = [match range];
NSString *matchString = [string substringWithRange:addressMatchRange];
如果你想从字典中检索 if:
addrDict[NSTextCheckingZIPKey]
会给你94103
,addrDict[NSTextCheckingStateKey]
会给你CA
,等等,你必须重构它,但顺序由你决定。
Apples NSDataDetector
可以像 NSTextCheckingResults
一样检测地址、日期和 URL 等各种信息。对于地址,它在字典中捕获信息,其中包含许多代表地址元素的键,例如地址、城市、州和邮政编码。 Here are the various keys.
我的问题是我不擅长使用字典,无法找出将字典转换回常规字符串的语法。我需要一个字符串,这样我就可以将它输入到地图的自然语言查询中。
任何人都可以建议将字典转换为字符串的语法。
这是我用来检测字典的代码。
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
}
}
NSTextCheckingResult
有一个 属性 range
可以使用:
这应该可以解决问题:
NSRange addressMatchRange = [match range];
NSString *matchString = [string substringWithRange:addressMatchRange];
如果你想从字典中检索 if:
addrDict[NSTextCheckingZIPKey]
会给你94103
,addrDict[NSTextCheckingStateKey]
会给你CA
,等等,你必须重构它,但顺序由你决定。