How to get country code using NSLocale in Swift 3

前端 未结 6 967
予麋鹿
予麋鹿 2020-12-13 17:31

Could you please help on how to get country code using NSLocale in Swift 3 ?

This is the previous code I have been using.

N         


        
相关标签:
6条回答
  • 2020-12-13 17:39
    print(NSLocale.current.regionCode)
    
    0 讨论(0)
  • 2020-12-13 17:45

    If you make sure that you're using an NSLocale and not a Locale instance, you can use the countryCode property:

    let locale: NSLocale = NSLocale.current as NSLocale
    let country: String? = locale.countryCode
    print(country ?? "no country")
    // > Prints "IE" or some other country code
    

    If you try to use countryCode with a Swift Locale Xcode will give you an error with a suggestion to use regionCode instead:

    let swiftLocale: Locale = Locale.current
    let swiftCountry: String? = swiftLocale.countryCode
    // > Error "countryCode' is unavailable: use regionCode instead"
    
    0 讨论(0)
  • 2020-12-13 17:56
    //MARK:- Get both country code and Mobile Phone number code
            var sendPhoneNumber = ""
    
                    if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String {
                         print(countryCode)
    
                        if countryCode != ""
                        {
                           let getCode = self.getCountryPhonceCode(countryCode)
    
                            if getCode != ""
                            {
                                sendPhoneNumber = getCode + tfMobileNumber.text!
                                getOTP(getPhoneNumber: sendPhoneNumber)
                            }
                        }
                    }
    
         //MARK:- Custom methods
    
         func getCountryPhonceCode (_ country : String) -> String
        {
            var countryDictionary  = ["AF":"93",
                                      "AL":"355",
                                      "DZ":"213",
                                      "AS":"1",
                                      "AD":"376",
                                      "AO":"244",
                                      "AI":"1",
                                      "AG":"1",
                                      "AR":"54",
                                      "AM":"374",
                                      "AW":"297",
                                      "AU":"61",
                                      "AT":"43",
                                      "AZ":"994",
                                      "BS":"1",
                                      "BH":"973",
                                      "BD":"880",
                                      "BB":"1",
                                      "BY":"375",
                                      "BE":"32",
                                      "BZ":"501",
                                      "BJ":"229",
                                      "BM":"1",
                                      "BT":"975",
                                      "BA":"387",
                                      "BW":"267",
                                      "BR":"55",
                                      "IO":"246",
                                      "BG":"359",
                                      "BF":"226",
                                      "BI":"257",
                                      "KH":"855",
                                      "CM":"237",
                                      "CA":"1",
                                      "CV":"238",
                                      "KY":"345",
                                      "CF":"236",
                                      "TD":"235",
                                      "CL":"56",
                                      "CN":"86",
                                      "CX":"61",
                                      "CO":"57",
                                      "KM":"269",
                                      "CG":"242",
                                      "CK":"682",
                                      "CR":"506",
                                      "HR":"385",
                                      "CU":"53",
                                      "CY":"537",
                                      "CZ":"420",
                                      "DK":"45",
                                      "DJ":"253",
                                      "DM":"1",
                                      "DO":"1",
                                      "EC":"593",
                                      "EG":"20",
                                      "SV":"503",
                                      "GQ":"240",
                                      "ER":"291",
                                      "EE":"372",
                                      "ET":"251",
                                      "FO":"298",
                                      "FJ":"679",
                                      "FI":"358",
                                      "FR":"33",
                                      "GF":"594",
                                      "PF":"689",
                                      "GA":"241",
                                      "GM":"220",
                                      "GE":"995",
                                      "DE":"49",
                                      "GH":"233",
                                      "GI":"350",
                                      "GR":"30",
                                      "GL":"299",
                                      "GD":"1",
                                      "GP":"590",
                                      "GU":"1",
                                      "GT":"502",
                                      "GN":"224",
                                      "GW":"245",
                                      "GY":"595",
                                      "HT":"509",
                                      "HN":"504",
                                      "HU":"36",
                                      "IS":"354",
                                      "IN":"91",
                                      "ID":"62",
                                      "IQ":"964",
                                      "IE":"353",
                                      "IL":"972",
                                      "IT":"39",
                                      "JM":"1",
                                      "JP":"81",
                                      "JO":"962",
                                      "KZ":"77",
                                      "KE":"254",
                                      "KI":"686",
                                      "KW":"965",
                                      "KG":"996",
                                      "LV":"371",
                                      "LB":"961",
                                      "LS":"266",
                                      "LR":"231",
                                      "LI":"423",
                                      "LT":"370",
                                      "LU":"352",
                                      "MG":"261",
                                      "MW":"265",
                                      "MY":"60",
                                      "MV":"960",
                                      "ML":"223",
                                      "MT":"356",
                                      "MH":"692",
                                      "MQ":"596",
                                      "MR":"222",
                                      "MU":"230",
                                      "YT":"262",
                                      "MX":"52",
                                      "MC":"377",
                                      "MN":"976",
                                      "ME":"382",
                                      "MS":"1",
                                      "MA":"212",
                                      "MM":"95",
                                      "NA":"264",
                                      "NR":"674",
                                      "NP":"977",
                                      "NL":"31",
                                      "AN":"599",
                                      "NC":"687",
                                      "NZ":"64",
                                      "NI":"505",
                                      "NE":"227",
                                      "NG":"234",
                                      "NU":"683",
                                      "NF":"672",
                                      "MP":"1",
                                      "NO":"47",
                                      "OM":"968",
                                      "PK":"92",
                                      "PW":"680",
                                      "PA":"507",
                                      "PG":"675",
                                      "PY":"595",
                                      "PE":"51",
                                      "PH":"63",
                                      "PL":"48",
                                      "PT":"351",
                                      "PR":"1",
                                      "QA":"974",
                                      "RO":"40",
                                      "RW":"250",
                                      "WS":"685",
                                      "SM":"378",
                                      "SA":"966",
                                      "SN":"221",
                                      "RS":"381",
                                      "SC":"248",
                                      "SL":"232",
                                      "SG":"65",
                                      "SK":"421",
                                      "SI":"386",
                                      "SB":"677",
                                      "ZA":"27",
                                      "GS":"500",
                                      "ES":"34",
                                      "LK":"94",
                                      "SD":"249",
                                      "SR":"597",
                                      "SZ":"268",
                                      "SE":"46",
                                      "CH":"41",
                                      "TJ":"992",
                                      "TH":"66",
                                      "TG":"228",
                                      "TK":"690",
                                      "TO":"676",
                                      "TT":"1",
                                      "TN":"216",
                                      "TR":"90",
                                      "TM":"993",
                                      "TC":"1",
                                      "TV":"688",
                                      "UG":"256",
                                      "UA":"380",
                                      "AE":"971",
                                      "GB":"44",
                                      "US":"1",
                                      "UY":"598",
                                      "UZ":"998",
                                      "VU":"678",
                                      "WF":"681",
                                      "YE":"967",
                                      "ZM":"260",
                                      "ZW":"263",
                                      "BO":"591",
                                      "BN":"673",
                                      "CC":"61",
                                      "CD":"243",
                                      "CI":"225",
                                      "FK":"500",
                                      "GG":"44",
                                      "VA":"379",
                                      "HK":"852",
                                      "IR":"98",
                                      "IM":"44",
                                      "JE":"44",
                                      "KP":"850",
                                      "KR":"82",
                                      "LA":"856",
                                      "LY":"218",
                                      "MO":"853",
                                      "MK":"389",
                                      "FM":"691",
                                      "MD":"373",
                                      "MZ":"258",
                                      "PS":"970",
                                      "PN":"872",
                                      "RE":"262",
                                      "RU":"7",
                                      "BL":"590",
                                      "SH":"290",
                                      "KN":"1",
                                      "LC":"1",
                                      "MF":"590",
                                      "PM":"508",
                                      "VC":"1",
                                      "ST":"239",
                                      "SO":"252",
                                      "SJ":"47",
                                      "SY":"963",
                                      "TW":"886",
                                      "TZ":"255",
                                      "TL":"670",
                                      "VE":"58",
                                      "VN":"84",
                                      "VG":"284",
                                      "VI":"340"]
            if countryDictionary[country] != nil {
                return countryDictionary[country]!
            }
    
            else {
                return ""
            }
    
        }
    
    0 讨论(0)
  • 2020-12-13 17:57

    See Wojciech N.'s answer for a simpler solution!


    Similarly as in NSLocale Swift 3, you have to cast the overlay type Locale back to its Foundation counterpart NSLocale in order to retrieve the country code:

    if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String {
        print(countryCode)
    }
    
    0 讨论(0)
  • 2020-12-13 18:01

    NSLocale.countryCode is the same as Locale.regionCode

    This is from Locale.swift

        /// Returns the region code of the locale, or nil if it has none.
        ///
        /// For example, for the locale "zh-Hant-HK", returns "HK".
        public var regionCode: String? {
            // n.b. this is called countryCode in ObjC
            if let result = _wrapped.object(forKey: .countryCode) as? String {
                if result.isEmpty {
                    return nil
                } else {
                    return result
                }
            } else {
                return nil
            }
        }
    
    0 讨论(0)
  • 2020-12-13 18:03

    You can use regionCode property on Locale struct.

    Locale.current.regionCode
    

    It is not documented as a substitute for old NSLocaleCountryCode construct but it looks like it is. The following code checks countryCodes for all known locales and compares them with regionCodes. They are identical.

    public func ==(lhs: [String?], rhs: [String?]) -> Bool {
        guard lhs.count == rhs.count else { return false }
    
        for (left, right) in zip(lhs, rhs) {
            if left != right {
                return false
            }
        }
    
        return true
    }
    
    let newIdentifiers = Locale.availableIdentifiers
    let newLocales = newIdentifiers.map { Locale(identifier: $0) }
    let newCountryCodes = newLocales.map { $0.regionCode }
    
    let oldIdentifiers = NSLocale.availableLocaleIdentifiers
    newIdentifiers == oldIdentifiers // true
    
    let oldLocales = oldIdentifiers.map { NSLocale(localeIdentifier: $0) }
    let oldLocalesConverted = oldLocales.map { $0 as Locale }
    newLocales == oldLocalesConverted // true
    
    let oldComponents = oldIdentifiers.map { NSLocale.components(fromLocaleIdentifier: $0) }
    let oldCountryCodes = oldComponents.map { $0[NSLocale.Key.countryCode.rawValue] }
    newCountryCodes == oldCountryCodes // true
    
    0 讨论(0)
提交回复
热议问题