Skip to content

Commit

Permalink
Merge pull request #10 from graycampbell/calling-codes
Browse files Browse the repository at this point in the history
Add option to display calling codes in country picker view controller
  • Loading branch information
graycampbell committed Oct 29, 2017
2 parents 70d9c1e + 12ac4c3 commit 169c23e
Show file tree
Hide file tree
Showing 21 changed files with 349 additions and 47 deletions.
16 changes: 16 additions & 0 deletions GCCountryPicker.xcodeproj/project.pbxproj
Expand Up @@ -8,6 +8,10 @@

/* Begin PBXBuildFile section */
E20304331F857F55000AC08C /* GCCountryPickerDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E20304321F857F55000AC08C /* GCCountryPickerDataSource.swift */; };
E25E7C5B1FA53FCE00B9FA1E /* GCTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25E7C5A1FA53FCE00B9FA1E /* GCTableViewCell.swift */; };
E25E7C5D1FA57F1200B9FA1E /* GCSearchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25E7C5C1FA57F1200B9FA1E /* GCSearchResult.swift */; };
E25E7C611FA5884C00B9FA1E /* GCCountryPickerDisplayMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25E7C601FA5884C00B9FA1E /* GCCountryPickerDisplayMode.swift */; };
E25E7C631FA59D4700B9FA1E /* GCSearchResultsDisplayMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25E7C621FA59D4700B9FA1E /* GCSearchResultsDisplayMode.swift */; };
E2644B401F7D92DD0034EA06 /* GCCountryPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = E2644B3E1F7D92DD0034EA06 /* GCCountryPicker.h */; settings = {ATTRIBUTES = (Public, ); }; };
E27C15561F81955600DA9091 /* GCSearchResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E27C15551F81955600DA9091 /* GCSearchResultsController.swift */; };
E27C15581F81963600DA9091 /* GCSearchResultsDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E27C15571F81963600DA9091 /* GCSearchResultsDelegate.swift */; };
Expand All @@ -18,6 +22,10 @@

/* Begin PBXFileReference section */
E20304321F857F55000AC08C /* GCCountryPickerDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GCCountryPickerDataSource.swift; sourceTree = "<group>"; };
E25E7C5A1FA53FCE00B9FA1E /* GCTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GCTableViewCell.swift; sourceTree = "<group>"; };
E25E7C5C1FA57F1200B9FA1E /* GCSearchResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GCSearchResult.swift; sourceTree = "<group>"; };
E25E7C601FA5884C00B9FA1E /* GCCountryPickerDisplayMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GCCountryPickerDisplayMode.swift; sourceTree = "<group>"; };
E25E7C621FA59D4700B9FA1E /* GCSearchResultsDisplayMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GCSearchResultsDisplayMode.swift; sourceTree = "<group>"; };
E2644B3B1F7D92DD0034EA06 /* GCCountryPicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GCCountryPicker.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E2644B3E1F7D92DD0034EA06 /* GCCountryPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GCCountryPicker.h; sourceTree = "<group>"; };
E2644B3F1F7D92DD0034EA06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
Expand Down Expand Up @@ -62,9 +70,13 @@
E2F9BFB41F7DA08900131AF8 /* GCCountry.swift */,
E20304321F857F55000AC08C /* GCCountryPickerDataSource.swift */,
E2F9BFB01F7D97D000131AF8 /* GCCountryPickerDelegate.swift */,
E25E7C601FA5884C00B9FA1E /* GCCountryPickerDisplayMode.swift */,
E2F9BFAD1F7D959A00131AF8 /* GCCountryPickerViewController.swift */,
E25E7C5C1FA57F1200B9FA1E /* GCSearchResult.swift */,
E27C15571F81963600DA9091 /* GCSearchResultsDelegate.swift */,
E25E7C621FA59D4700B9FA1E /* GCSearchResultsDisplayMode.swift */,
E27C15551F81955600DA9091 /* GCSearchResultsController.swift */,
E25E7C5A1FA53FCE00B9FA1E /* GCTableViewCell.swift */,
E2644B3F1F7D92DD0034EA06 /* Info.plist */,
);
path = GCCountryPicker;
Expand Down Expand Up @@ -154,8 +166,12 @@
E20304331F857F55000AC08C /* GCCountryPickerDataSource.swift in Sources */,
E2F9BFAE1F7D959A00131AF8 /* GCCountryPickerViewController.swift in Sources */,
E2F9BFB11F7D97D000131AF8 /* GCCountryPickerDelegate.swift in Sources */,
E25E7C631FA59D4700B9FA1E /* GCSearchResultsDisplayMode.swift in Sources */,
E2F9BFB51F7DA08900131AF8 /* GCCountry.swift in Sources */,
E25E7C5B1FA53FCE00B9FA1E /* GCTableViewCell.swift in Sources */,
E25E7C5D1FA57F1200B9FA1E /* GCSearchResult.swift in Sources */,
E27C15581F81963600DA9091 /* GCSearchResultsDelegate.swift in Sources */,
E25E7C611FA5884C00B9FA1E /* GCCountryPickerDisplayMode.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
27 changes: 22 additions & 5 deletions GCCountryPicker/GCCountry.swift
Expand Up @@ -9,21 +9,27 @@ import UIKit

// MARK: Properties & Initializers

/// The GCCountry class defines an object that contains the ISO 3166-1 alpha-2 country code and localized display name for a country.
/// The GCCountry class defines an object that contains the country code, calling code, and localized display name for a country.

public final class GCCountry: NSObject {

// MARK: Properties

/// The ISO 3166-1 alpha-2 code for the country.

public let countryCode: String!
public let countryCode: String

/// The calling code for the country.
///
/// This value is automatically generated using the supplied country code.

public let callingCode: String?

/// The localized display name for the country.
///
/// This value is automatically generated using the supplied country code and the current locale.

@objc public let localizedDisplayName: String!
@objc public let localizedDisplayName: String

// MARK: Initializers

Expand All @@ -34,14 +40,25 @@ public final class GCCountry: NSObject {

public init?(countryCode: String) {

if let localizedDisplayName = Locale(identifier: Locale.preferredLanguages.first!).localizedString(forRegionCode: countryCode) {
self.countryCode = countryCode.uppercased()
self.callingCode = GCCountry.callingCode(forCountryCode: self.countryCode)

if let localizedDisplayName = Locale(identifier: Locale.preferredLanguages.first!).localizedString(forRegionCode: self.countryCode) {

self.countryCode = countryCode
self.localizedDisplayName = localizedDisplayName
}
else {

return nil
}
}

// MARK: Calling Code

class func callingCode(forCountryCode countryCode: String) -> String? {

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

return callingCodes[countryCode]
}
}
21 changes: 21 additions & 0 deletions GCCountryPicker/GCCountryPickerDisplayMode.swift
@@ -0,0 +1,21 @@
//
// GCCountryPickerDisplayMode.swift
// GCCountryPicker
//
// Created by Gray Campbell on 10/28/17.
//

import UIKit

/// The display mode of the country picker.

public enum GCCountryPickerDisplayMode {

/// The country picker will include calling codes.

case withCallingCodes

/// The country picker will not include calling codes.

case withoutCallingCodes
}

0 comments on commit 169c23e

Please sign in to comment.