title: set Country name and country code to button title text according to contact number extension i. +91 when fetched from contact list swift ios
body: <p>I have a app in which i have a button whose title text displays country name and code when tapped on it. i.e it displays IN +91. when the button is pressed, a popup opens which lists all country with the country name and code. Now beside that beside i have a mobile number textfield which will display mobile number when selected from contact list. Beside mobile textfield i have a button which opens up default contact list, now what i want that let's say i have picked a contact whose number is +919998536042, then the number 9998536042 must be displayed on textfield and the button title text should display IN +91. i.e the extension from contact list must match up with the country code in countrylist array that i have used to display the country list. Please help me. I am stuck. and one more thing lets say i clicked on In +91 button and selected for example US +1, then i picked contact which doesn't have a extesnion then the button title text will remain same which is US +1 and if extension found for example +91 then some number then button title text will be IN +91</p>
  
  <p>my app images for better understanding:
  <a href="https://i.stack.imgur.com/H7FJl.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/H7FJl.png" alt="screenshot 1"></a></p>
  
  <p>now clicking on IN +91 opens up a picker shown in screenshot 2
  <a href="https://i.stack.imgur.com/2ZskV.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/2ZskV.png" alt="screenshot 2"></a></p>
  
  <p>country data:</p>
  
  <pre><code>let Country:[[String:[String]]] = [["AF": ["Afghanistan","93"]],
                                     ["AX": ["Aland Islands","358"]],
                                     ["AL": ["Albania","355"]],
                                     ["DZ": ["Algeria","213"]],
                                     ["AS": ["American Samoa","1"]],
                                     ["AD": ["Andorra","376"]],
                                     ["AO": ["Angola","244"]],
                                     ["AI": ["Anguilla","1"]],
                                     ["AQ": ["Antarctica","672"]],
                                     ["AG": ["Antigua and Barbuda","1"]],
                                     ["AR": ["Argentina","54"]],
                                     ["AM": ["Armenia","374"]],
                                     ["AW": ["Aruba","297"]],
                                     ["AU": ["Australia","61"]],
                                     ["AT": ["Austria","43"]],
                                     ["AZ": ["Azerbaijan","994"]],
                                     ["BS": ["Bahamas","1"]],
                                     ["BH": ["Bahrain","973"]],
                                     ["BD": ["Bangladesh","880"]],
                                     ["BB": ["Barbados","1"]],
                                     ["BY": ["Belarus","375"]],
                                     ["BE": ["Belgium","32"]],
                                     ["BZ": ["Belize","501"]],
                                     ["BJ": ["Benin","229"]],
                                     ["BM": ["Bermuda","1"]],
                                     ["BT": ["Bhutan","975"]],
                                     ["BO": ["Bolivia","591"]],
                                     ["BA": ["Bosnia and Herzegovina","387"]],
                                     ["BW": ["Botswana","267"]],
                                     ["BV": ["Bouvet Island","47"]],
                                     ["BQ": ["BQ","599"]],
                                     ["BR": ["Brazil","55"]],
                                     ["IO": ["British Indian Ocean Territory","246"]],
                                     ["VG": ["British Virgin Islands","1"]],
                                     ["BN": ["Brunei Darussalam","673"]],
                                     ["BG": ["Bulgaria","359"]],
                                     ["BF": ["Burkina Faso","226"]],
                                     ["BI": ["Burundi","257"]],
                                     ["KH": ["Cambodia","855"]],
                                     ["CM": ["Cameroon","237"]],
                                     ["CA": ["Canada","1"]],
                                     ["CV": ["Cape Verde","238"]],
                                     ["KY": ["Cayman Islands","345"]],
                                     ["CF": ["Central African Republic","236"]],
                                     ["TD": ["Chad","235"]],
                                     ["CL": ["Chile","56"]],
                                     ["CN": ["China","86"]],
                                     ["CX": ["Christmas Island","61"]],
                                     ["CC": ["Cocos (Keeling) Islands","61"]],
                                     ["CO": ["Colombia","57"]],
                                     ["KM": ["Comoros","269"]],
                                     ["CG": ["Congo (Brazzaville)","242"]],
                                     ["CD": ["Congo, Democratic Republic of the","243"]],
                                     ["CK": ["Cook Islands","682"]],
                                     ["CR": ["Costa Rica","506"]],
                                     ["CI": ["Côte d'Ivoire","225"]],
                                     ["HR": ["Croatia","385"]],
                                     ["CU": ["Cuba","53"]],
                                     ["CW": ["Curacao","599"]],
                                     ["CY": ["Cyprus","537"]],
                                     ["CZ": ["Czech Republic","420"]],
                                     ["DK": ["Denmark","45"]],
                                     ["DJ": ["Djibouti","253"]],
                                     ["DM": ["Dominica","1"]],
                                     ["DO": ["Dominican Republic","1"]],
                                     ["EC": ["Ecuador","593"]],
                                     ["EG": ["Egypt","20"]],
                                     ["SV": ["El Salvador","503"]],
                                     ["GQ": ["Equatorial Guinea","240"]],
                                     ["ER": ["Eritrea","291"]],
                                     ["EE": ["Estonia","372"]],
                                     ["ET": ["Ethiopia","251"]],
                                     ["FK": ["Falkland Islands (Malvinas)","500"]],
                                     ["FO": ["Faroe Islands","298"]],
                                     ["FJ": ["Fiji","679"]],
                                     ["FI": ["Finland","358"]],
                                     ["FR": ["France","33"]],
                                     ["GF": ["French Guiana","594"]],
                                     ["PF": ["French Polynesia","689"]],
                                     ["TF": ["French Southern Territories","689"]],
                                     ["GA": ["Gabon","241"]],
                                     ["GM": ["Gambia","220"]],
                                     ["GE": ["Georgia","995"]],
                                     ["DE": ["Germany","49"]],
                                     ["GH": ["Ghana","233"]],
                                     ["GI": ["Gibraltar","350"]],
                                     ["GR": ["Greece","30"]],
                                     ["GL": ["Greenland","299"]],
                                     ["GD": ["Grenada","1"]],
                                     ["GP": ["Guadeloupe","590"]],
                                     ["GU": ["Guam","1"]],
                                     ["GT": ["Guatemala","502"]],
                                     ["GG": ["Guernsey","44"]],
                                     ["GN": ["Guinea","224"]],
                                     ["GW": ["Guinea-Bissau","245"]],
                                     ["GY": ["Guyana","595"]],
                                     ["HT": ["Haiti","509"]],
                                     ["VA": ["Holy See (Vatican City State)","379"]],
                                     ["HN": ["Honduras","504"]],
                                     ["HK": ["Hong Kong, Special Administrative Region of China","852"]],
                                     ["HU": ["Hungary","36"]],
                                     ["IS": ["Iceland","354"]],
                                     ["IN": ["India","91"]],
                                     ["ID": ["Indonesia","62"]],
                                     ["IR": ["Iran, Islamic Republic of","98"]],
                                     ["IQ": ["Iraq","964"]],
                                     ["IE": ["Ireland","353"]],
                                     ["IM": ["Isle of Man","44"]],
                                     ["IL": ["Israel","972"]],
                                     ["IT": ["Italy","39"]],
                                     ["JM": ["Jamaica","1"]],
                                     ["JP": ["Japan","81"]],
                                     ["JE": ["Jersey","44"]],
                                     ["JO": ["Jordan","962"]],
                                     ["KZ": ["Kazakhstan","77"]],
                                     ["KE": ["Kenya","254"]],
                                     ["KI": ["Kiribati","686"]],
                                     ["KP": ["Korea, Democratic People's Republic of","850"]],
                                     ["KR": ["Korea, Republic of","82"]],
                                     ["KW": ["Kuwait","965"]],
                                     ["KG": ["Kyrgyzstan","996"]],
                                     ["LA": ["Lao PDR","856"]],
                                     ["LV": ["Latvia","371"]],
                                     ["LB": ["Lebanon","961"]],
                                     ["LS": ["Lesotho","266"]],
                                     ["LR": ["Liberia","231"]],
                                     ["LY": ["Libya","218"]],
                                     ["LI": ["Liechtenstein","423"]],
                                     ["LT": ["Lithuania","370"]],
                                     ["LU": ["Luxembourg","352"]],
                                     ["MO": ["Macao, Special Administrative Region of China","853"]],
                                     ["MK": ["Macedonia, Republic of","389"]],
                                     ["MG": ["Madagascar","261"]],
                                     ["MW": ["Malawi","265"]],
                                     ["MY": ["Malaysia","60"]],
                                     ["MV": ["Maldives","960"]],
                                     ["ML": ["Mali","223"]],
                                     ["MT": ["Malta","356"]],
                                     [ "MH": ["Marshall Islands","692"]],
                                     ["MQ": ["Martinique","596"]],
                                     [ "MR": ["Mauritania","222"]],
                                     ["MU": ["Mauritius","230"]],
                                     [ "YT": ["Mayotte","262"]],
                                     ["MX": ["Mexico","52"]],
                                     [ "FM": ["Micronesia, Federated States of","691"]],
                                     ["MD": ["Moldova","373"]],
                                     [ "MC": ["Monaco","377"]],
                                     ["MN": ["Mongolia","976"]],
                                     [ "ME": ["Montenegro","382"]],
                                     ["MS": ["Montserrat","1"]],
                                     [ "MA": ["Morocco","212"]],
                                     ["MZ": ["Mozambique","258"]],
                                     [ "MM": ["Myanmar","95"]],
                                     ["NA": ["Namibia","264"]],
                                     [ "NR": ["Nauru","674"]],
                                     ["NP": ["Nepal","977"]],
                                     [ "NL": ["Netherlands","31"]],
                                     ["AN": ["Netherlands Antilles","599"]],
                                     [ "NC": ["New Caledonia","687"]],
                                     ["NZ": ["New Zealand","64"]],
                                     [ "NI": ["Nicaragua","505"]],
                                     ["NE": ["Niger","227"]],
                                     [ "NG": ["Nigeria","234"]],
                                     ["NU": ["Niue","683"]],
                                     [ "NF": ["Norfolk Island","672"]],
                                     ["MP": ["Northern Mariana Islands","1"]],
                                     [ "NO": ["Norway","47"]],
                                     ["OM": ["Oman","968"]],
                                     [ "PK": ["Pakistan","92"]],
                                     ["PW": ["Palau","680"]],
                                     [ "PS": ["Palestinian Territory, Occupied","970"]],
                                     ["PA": ["Panama","507"]],
                                     [ "PG": ["Papua New Guinea","675"]],
                                     ["PY": ["Paraguay","595"]],
                                     [ "PE": ["Peru","51"]],
                                     ["PH": ["Philippines","63"]],
                                     [ "PN": ["Pitcairn","872"]],
                                     ["PL": ["Poland","48"]],
                                     [ "PT": ["Portugal","351"]],
                                     ["PR": ["Puerto Rico","1"]],
                                     [ "QA": ["Qatar","974"]],
                                     ["RE": ["Réunion","262"]],
                                     [ "RO": ["Romania","40"]],
                                     ["RU": ["Russian Federation","7"]],
                                     [ "RW": ["Rwanda","250"]],
                                     ["SH": ["Saint Helena","290"]],
                                     [ "KN": ["Saint Kitts and Nevis","1"]],
                                     ["LC": ["Saint Lucia","1"]],
                                     ["PM": ["Saint Pierre and Miquelon","508"]],
                                     [ "VC": ["Saint Vincent and Grenadines","1"]],
                                     ["BL": ["Saint-Barthélemy","590"]],
                                     ["MF": ["Saint-Martin (French part)","590"]],
                                     [ "WS": ["Samoa","685"]],
                                     ["SM": ["San Marino","378"]],
                                     [ "ST": ["Sao Tome and Principe","239"]],
                                     ["SA": ["Saudi Arabia","966"]],
                                     [ "SN": ["Senegal","221"]],
                                     ["RS": ["Serbia","381"]],
                                     [ "SC": ["Seychelles","248"]],
                                     ["SL": ["Sierra Leone","232"]],
                                     ["SG": ["Singapore","65"]],
                                     [ "SX": ["Sint Maarten","1"]],
                                     ["SK": ["Slovakia","421"]],
                                     [ "SI": ["Slovenia","386"]],
                                     ["SB": ["Solomon Islands","677"]],
                                     [ "SO": ["Somalia","252"]],
                                     ["ZA": ["South Africa","27"]],
                                     [ "GS": ["South Georgia and the South Sandwich Islands","500"]],
                                     ["SS​": ["South Sudan","211"]],
                                     [ "ES": ["Spain","34"]],
                                     ["LK": ["Sri Lanka","94"]],
                                     [ "SD": ["Sudan","249"]],
                                     [ "SR": ["Suriname","597"]],
                                     ["SJ": ["Svalbard and Jan Mayen Islands","47"]],
                                     [ "SZ": ["Swaziland","268"]],
                                     [ "SE": ["Sweden","46"]],
                                     [ "CH": ["Switzerland","41"]],
                                     [ "SY": ["Syrian Arab Republic (Syria)","963"]],
                                     [ "TW": ["Taiwan, Republic of China","886"]],
                                     ["TJ": ["Tajikistan","992"]],
                                     [ "TZ": ["Tanzania, United Republic of","255"]],
                                     ["TH": ["Thailand","66"]],
                                     [ "TL": ["Timor-Leste","670"]],
                                     [ "TG": ["Togo","228"]],
                                     ["TK": ["Tokelau","690"]],
                                     ["TO": ["Tonga","676"]],
                                     [ "TT": ["Trinidad and Tobago","1"]],
                                     [ "TN": ["Tunisia","216"]],
                                     [ "TR": ["Turkey","90"]],
                                     [ "TM": ["Turkmenistan","993"]],
                                     [ "TC": ["Turks and Caicos Islands","1"]],
                                     [ "TV": ["Tuvalu","688"]],
                                     ["UG": ["Uganda","256"]],
                                     [ "UA": ["Ukraine","380"]],
                                     [ "AE": ["United Arab Emirates","971"]],
                                     ["GB": ["United Kingdom","44"]],
                                     ["US": ["United States of America","1"]],
                                     ["UY": ["Uruguay","598"]],
                                     ["UZ": ["Uzbekistan","998"]],
                                     ["VU": ["Vanuatu","678"]],
                                     ["VE": ["Venezuela (Bolivarian Republic of)","58"]],
                                     ["VN": ["Viet Nam","84"]],
                                     ["VI": ["Virgin Islands, US","1"]],
                                     ["WF": ["Wallis and Futuna Islands","681"]],
                                     ["EH": ["Western Sahara","212"]],
                                     ["YE": ["Yemen","967"]],
                                     ["ZM": ["Zambia","260"]],
                                     ["ZW": ["Zimbabwe","263"]]
  ]
  </code></pre>
  
  <p>My code for country list :</p>
  
  <pre><code>//Variables country popup
      var key = [String]()
      var value: NSMutableArray = NSMutableArray()
      var c_name = [String]()
      var c_code = [String]()
      var searchTag = String()
      var select_code = String()
      var select_c_s_name = String()
  
  override func viewDidLoad()
      {
          super.viewDidLoad()
  
          get_country_data()
      }
  
  //MARK:- Fetch Country Data
      func get_country_data()
      {
          key.removeAll()
          value.removeAllObjects()
          for i in 0 ..&lt; Country.count
          {
              let U = [String](Country[i].keys)
              let V =  Array(Country[i][U[0]]!)
              key.append(U[0])
              value.add(V)
          }
          c_name.removeAll()
          c_code.removeAll()
          for j in 0 ..&lt; value.count
          {
              c_name.append((value.object(at: j) as! NSArray).object(at: 0) as! String)
              c_code.append((value.object(at: j) as! NSArray).object(at: 1) as! String)
          }
          self.cntryTblView.reloadData()
      }
  
      //MARK:- Country Code Search Functions
      func search_data()
      {
          let searchResult = Country.flatMap({ $0 }).filter {
              let variable = $0
              return variable.value[0].lowercased().contains(searchTag) || variable.value[1].lowercased().contains(searchTag) || variable.key.lowercased().contains(searchTag)
          }
          key.removeAll()
          value.removeAllObjects()
          for i in 0..&lt;searchResult.count
          {
              key.append(searchResult[i].key)
              value.add(searchResult[i].value)
          }
          c_name.removeAll()
          c_code.removeAll()
          for j in 0..&lt;value.count {
              c_name.append((value.object(at: j) as! NSArray).object(at: 0) as! String)
              c_code.append((value.object(at: j) as! NSArray).object(at: 1) as! String)
          }
          self.cntryTblView.reloadData()
      }
  
     @IBAction func selectCntryCode(_ sender: DCustomButton)
      {
         ApiUtillity.sharedInstance.AddSubViewtoParentView(parentview: self.view, subview: self.cntryPopupView)
  
      }
  
  extension NeighbourDetailsVC: UITableViewDataSource, UITableViewDelegate
  {
      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int
      {
          return key.count
      }
  
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell
      {
            let cell = tableView.dequeueReusableCell(withIdentifier: "CountryCodeCell", for: indexPath) as! CountryCodeCell
              cell.cntry_img.image = UIImage(named: key[indexPath.row])
              cell.cntry_code.text = "+"+c_code[indexPath.row]
              cell.cntry_name.text = c_name[indexPath.row]+"  "+"("+key[indexPath.row]+")"
              return cell
      }
  
      func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
      {
          select_code = c_code[indexPath.row]
          select_c_s_name = key[indexPath.row]
          self.cntryTblView.reloadData()
          self.countryCodeBtn.setTitle(select_c_s_name+" +"+select_code, for: .normal)
          self.get_country_data()
      }
  }
  </code></pre>
  
  <p>Code for when tapping on button which opens up contact list picker:</p>
  
  <pre><code>//MARK:- Open Contact Picker
      @IBAction func openContactPicker(_ sender: UIButton)
      {
          askForContactAccess()
      }
  
  //MARK:- Ask for contact access
      func askForContactAccess()
      {
          let authorizationStatus = CNContactStore.authorizationStatus(for: CNEntityType.contacts)
  
          switch authorizationStatus
          {
          case .denied, .notDetermined:
              self.contactStore.requestAccess(for: CNEntityType.contacts, completionHandler: { (access, accessError) -&gt; Void in
                  if !access {
                      if authorizationStatus == CNAuthorizationStatus.denied {
                          DispatchQueue.main.async {
                              let message = "\(accessError!.localizedDescription)\n\nPlease allow the app to access your contacts through the Settings."
                              let alertController = UIAlertController(title: "Contacts", message: message, preferredStyle: UIAlertController.Style.alert)
  
                              let dismissAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default) { (action) -&gt; Void in
                              }
  
                              alertController.addAction(dismissAction)
  
                              self.present(alertController, animated: true, completion: nil)
                          }
                      }
                  }
              })
              break
          case .authorized:
              contactPicker.delegate = self
              contactPicker.displayedPropertyKeys = [CNContactGivenNameKey, CNContactMiddleNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
              self.present(contactPicker, animated: true)
              break
          default:
              break
          }
      }
  
  // Delegate method for contact picker in which i am setting selected contact name and number to name and mobile textfield
  extension NeighbourDetailsVC: CNContactPickerDelegate
  {
      func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact)
      {
          let phoneNumbersCount = contact.phoneNumbers.count
          let userName: String = "\(contact.givenName) \(contact.middleName) \(contact.familyName)"
  
          guard phoneNumbersCount &gt; 0 else
          {
              let alertController = UIAlertController(title: "Selected contact doesn't have a number", message: nil, preferredStyle: .alert)
  
              let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: {
                  alert -&gt; Void in
  
              })
              alertController.addAction(cancelAction)
              dismiss(animated: true)
              self.present(alertController, animated: true, completion: nil)
              return
          }
  
          if phoneNumbersCount == 1
          {
             setNumberFromContact(contactNumber: contact.phoneNumbers[0].value.stringValue)
             self.nameTxtField.text = userName
          }
          else
          {
              let alertController = UIAlertController(title: "Select one of the numbers", message: nil, preferredStyle: .alert)
  
              for i in 0...phoneNumbersCount-1
              {
                  let phoneAction = UIAlertAction(title: contact.phoneNumbers[i].value.stringValue, style: .default, handler: {
                      alert -&gt; Void in
                      self.setNumberFromContact(contactNumber: contact.phoneNumbers[i].value.stringValue)
                      self.nameTxtField.text = userName
                  })
                  alertController.addAction(phoneAction)
              }
              let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: {
                  alert -&gt; Void in
  
              })
              alertController.addAction(cancelAction)
  
              dismiss(animated: true)
              self.present(alertController, animated: true, completion: nil)
          }
      }
  
      func setNumberFromContact(contactNumber: String)
      {
          var contactNumber = contactNumber.replacingOccurrences(of: "-", with: "")
          contactNumber = contactNumber.replacingOccurrences(of: "(", with: "").replacingOccurrences(of: ")", with: "")
          contactNumber = contactNumber.replacingOccurrences(of: " ", with: "")
  
          guard contactNumber.count &gt;= 10 else
          {
              let alertController = UIAlertController(title: "Selected contact doesn't have a valid number", message: nil, preferredStyle: .alert)
  
              let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: {
                  alert -&gt; Void in
  
              })
              alertController.addAction(cancelAction)
              dismiss(animated: true)
              self.present(alertController, animated: true, completion: nil)
              return
          }
  
          self.mobileTxtField.text = String(contactNumber.suffix(10))
          self.mobileTxtField.resignFirstResponder()
      }
  }
  </code></pre>