如何在 iOS SDK 上通过给定的邮政编码 (ZIP) 获取国家/地区名称

Posted

技术标签:

【中文标题】如何在 iOS SDK 上通过给定的邮政编码 (ZIP) 获取国家/地区名称【英文标题】:How to get Country name by given Postal Code (ZIP) on iOS SDK 【发布时间】:2016-02-01 07:04:30 【问题描述】:

是否可以通过提供用户的邮政编码来获取国家名称?

我查看了核心位置框架,但通过给定邮政编码并查找国家/地区名称,它看起来并不能反过来工作。

核心位置框架 (CoreLocation.framework) 提供位置 和应用程序的标题信息。对于位置信息, 框架使用板载 GPS、蜂窝或 Wi-Fi 无线电来查找 用户当前的经度和纬度。

我希望ios SDK上有一个类,我真的不想使用其中一个Google Maps API

【问题讨论】:

【参考方案1】:

是的,您的解决方案可以在 iOS SDK 中找到。

将文本字段连接到此操作:

- (IBAction)doSomethingButtonClicked:(id) sender

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:yourZipCodeGoesHereTextField.text completionHandler:^(NSArray *placemarks, NSError *error) 

        if(error != nil)
        
            NSLog(@"error from geocoder is %@", [error localizedDescription]);
         else 
            for(CLPlacemark *placemark in placemarks)
                NSString *city1 = [placemark locality];
                NSLog(@"city is %@",city1);
                NSLog(@"country is %@",[placemark country]);
                // you'll see a whole lotta stuff is available
                // in the placemark object here...
                NSLog(@"%@",[placemark description]);
            
        
    ];

我不知道 iOS 是否支持所有国家/地区的邮政编码,但它绝对适用于英国(例如“YO258UH”的邮政编码)和加拿大(“V3H5H1”)

【讨论】:

【参考方案2】:

Michael Dautermann's 答案是正确的,如果有人来这篇文章寻找它,只需添加 swift (v4.2) 的代码:

@IBAction func getLocationTapped(_ sender: Any) 

    guard let zipcode = zipcodeTxtField.text else 
        print("must enter zipcode")
        return
    

    CLGeocoder().geocodeAddressString(zipcode)  (placemarks, error) in
        if let error = error
            print("Unable to get the location: (\(error))")
        
        else
            if let placemarks = placemarks

                // get coordinates and city
                guard let location = placemarks.first?.location, let city = placemarks.first?.locality else 
                    print("Location not found")
                    return
                


                print("coordinates: -> \(location.coordinate.latitude) , \(location.coordinate.longitude)")
                print("city: -> \(city)")

                if let country = placemarks.first?.country
                     print("country: -> \(country)")
                

                //update UI on main thread
                DispatchQueue.main.async 
                    self.countryLbl.text = country
                
            
        
    

【讨论】:

以上是关于如何在 iOS SDK 上通过给定的邮政编码 (ZIP) 获取国家/地区名称的主要内容,如果未能解决你的问题,请参考以下文章

iOS平台上音频编码成aac

如何通过在android中使用agora sdk在onFileMessageReceived中的给定路径中下载文件

Xcode iOS SDK 兼容性

在 Google Maps SDK iOS 中的所有其他标记上设置标记

如何在 xcode 5 上安装 ios 8 sdk?

如何在 iOS 10 上使用 Facebook iOS SDK