Swift中通过Locale获取+91格式电话国家码的实现方案
获取对应地区的国际电话国家码(Apple官方库实现)
嘿,这个需求很好搞定,用Apple官方框架就能实现,给你两个实用的方案,看你场景选:
方案一:基于Locale地区码映射(纯本地,无需SIM卡)
Apple的Foundation框架本身没有直接把regionCode转成电话国家码的API,但我们可以用官方语法维护一个标准的映射字典,完全符合要求:
import Foundation func getPhoneCountryCode(from regionCode: String) -> String? { // 这里可以根据你需要支持的地区扩展映射表,用的是ISO 3166-1 alpha-2地区码和E.164电话国家码的标准对应关系 let regionToCodeMap: [String: String] = [ "IN": "+91", "US": "+1", "CN": "+86", "GB": "+44", "JP": "+81", "DE": "+49" // 按需添加更多地区即可 ] return regionToCodeMap[regionCode.uppercased()] } // 调用示例,结合你原来的Locale代码 if let regionCode = Locale.current.regionCode { if let countryCode = getPhoneCountryCode(from: regionCode) { print("电话国家码:\(countryCode)") // 当regionCode是IN时,输出+91 } else { print("暂不支持该地区的电话国家码查询") } }
这个方案的好处是不需要依赖任何硬件,只要Locale设置正确就能拿到结果,适合大多数通用场景。
方案二:基于SIM卡运营商获取(更精准)
如果你的App主要针对带SIM卡的设备(比如iPhone),而且需要更精准的当前所在国家(避免Locale设置和实际地区不一致的情况),可以用CoreTelephony框架获取SIM卡的移动国家码(MCC),再转成电话国家码:
首先,记得在你的项目里导入CoreTelephony框架,然后用下面的代码:
import CoreTelephony func getSimBasedPhoneCountryCode() -> String? { let networkInfo = CTTelephonyNetworkInfo() guard let carrier = networkInfo.subscriberCellularProvider, let mcc = carrier.mobileCountryCode else { return nil } // MCC和E.164电话国家码的标准映射,比如印度的MCC是404/405,都对应+91 let mccToCodeMap: [String: String] = [ "404": "+91", "405": "+91", "460": "+86", "310": "+1", "234": "+44" ] return mccToCodeMap[mcc] } // 调用示例 if let countryCode = getSimBasedPhoneCountryCode() { print("SIM卡对应的电话国家码:\(countryCode)") } else { print("无法获取SIM卡信息或该地区未收录") }
注意:这个方法在没有SIM卡的设备(比如WiFi版iPad、iPod Touch)上会返回nil,所以要做好容错处理。
内容的提问来源于stack exchange,提问作者Anup Gupta
相关产品推荐
相关产品推荐

