使用iOS 8.0。
我Google API用来获取位置。我想减少使用NSPredicate和KeyPath的编码。
Google API
如果我是Sql开发人员,我会编写类似的查询,
1. (select address_components from MAIN_TABLE where types like 'postal_code') from this I will get NAME_TABLE rows. 2.select long_name from NAME_TABLE where types like 'locality'
为此,我正在使用下面的代码,看着 @ztan 的答案后,我已经更改了这样的代码
编辑:答案
NSArray *addressArray = json[@"results"]; NSPredicate *predicateForTypes=[NSPredicate predicateWithFormat:@"(types CONTAINS 'postal_code')"]; addressArray=([addressArray filteredArrayUsingPredicate:predicateForTypes][0])[@"address_components"]; NSPredicate *predicateForCity=[NSPredicate predicateWithFormat:@"(types CONTAINS 'locality')"]; NSString *cityName=([addressArray filteredArrayUsingPredicate:predicateForCity][0])[@"long_name"];
我在JSON以下…
{ "address_components" = ( { "long_name" = 221; "short_name" = 221; types = ( "street_number" ); }, { "long_name" = "Juniper Drive"; "short_name" = "Juniper Dr"; types = ( route ); }, { "long_name" = "North Kingstown"; "short_name" = "North Kingstown"; types = ( locality, political ); }, { "long_name" = "Washington County"; "short_name" = "Washington County"; types = ( "administrative_area_level_2", political ); }, { "long_name" = "Rhode Island"; "short_name" = RI; types = ( "administrative_area_level_1", political ); }, { "long_name" = "United States"; "short_name" = US; types = ( country, political ); }, { "long_name" = 02852; "short_name" = 02852; types = ( "postal_code" ); }, { "long_name" = 4308; "short_name" = 4308; types = ( "postal_code_suffix" ); } ); "formatted_address" = "221 Juniper Drive, North Kingstown, RI 02852, USA"; geometry = { location = { lat = "41.577761"; lng = "-71.468383"; }; "location_type" = ROOFTOP; viewport = { northeast = { lat = "41.5791099802915"; lng = "-71.46703401970849"; }; southwest = { lat = "41.5764120197085"; lng = "-71.4697319802915"; }; }; }; "place_id" = ChIJ563yzFex5YkRujoi28Fvzvo; types = ( "street_address" ); }, { "address_components" = ( { "long_name" = "North Kingstown"; "short_name" = "North Kingstown"; types = ( locality, political ); }, { "long_name" = "Washington County"; "short_name" = "Washington County"; types = ( "administrative_area_level_2", political ); }, { "long_name" = "Rhode Island"; "short_name" = RI; types = ( "administrative_area_level_1", political ); }, { "long_name" = "United States"; "short_name" = US; types = ( country, political ); } ); "formatted_address" = "North Kingstown, RI, USA"; geometry = { bounds = { northeast = { lat = "41.6549521"; lng = "-71.4023083"; }; southwest = { lat = "41.497126"; lng = "-71.52244109999999"; }; }; location = { lat = "41.5568315"; lng = "-71.4536835"; }; "location_type" = APPROXIMATE; viewport = { northeast = { lat = "41.6549521"; lng = "-71.4023083"; }; southwest = { lat = "41.497126"; lng = "-71.52244109999999"; }; }; }; "place_id" = "ChIJgWUP-V-x5YkRO7Zie7NXWsI"; types = ( locality, political ); },2nd JSON Object, 3rd JSON Object ,......,....
我的问题是如何减少编码? 使用NSPRedicates和KeyPath .. 这就是我们如何解决问题的方法……我在@ztan的答案中提到了这一点,请看一看,这将是有益的。
请看我的第二条评论....... :)
您可以执行以下操作:
NSArray *addressArray = resultDict[@"results"]; NSPredicate *predicateFromTypes=[NSPredicate predicateWithFormat:@"(types CONTAINS 'postal_code') AND (types CONTAINS 'locality')"]; NSLog(@"\n%@", [addressArray[0][@"address_components"] filteredArrayUsingPredicate:predicateFromTypes][0][@"long_name"]);