Swiftpack.co - funky-monkey/IsoCountryCodes as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by funky-monkey.
funky-monkey/IsoCountryCodes 1.0.1
Provides ISO codes, names and currencies for countries.
⭐️ 99
πŸ•“ 5 days ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/funky-monkey/IsoCountryCodes.git", from: "1.0.1")

IsoCountryCodes for Swift

Platform version Swift Version

Iso country codes - that thing that we discussed that defines codes for the names of countries, dependent territories, and special areas of geographical interest.

What?

This is a iOS Swift library/class files that does a simple lookup depending on a alpha2, alpha3 or numeric value you give it. Currently it holds all the 249 countries, territories, or areas of geographical interest that are assigned official codes in ISO 3166-1.

Features:

This library returns ISO codes, names and currencies for countries.

  • β˜‘ Find by alpha-2, alpha-3 or numeric (String - yes I know...)
  • β˜‘ Search by (partial) name, case- and diacritic insensitive
  • β˜‘ Search by currency code
  • β˜‘ Search by phone dialing code (+31 for Netherlands, +1 for USA, etc...)
  • β˜‘ Retrieve a corresponding emoji flag for a country code.
  • β˜‘ Retrieve a fraction digits or decimal places for a country's currency. This can be useful when converting an amount in a certain currency to digits (ex 1 euro = 100 cent, 1 KD = 1000 fils)

Usage:

You can search via numeric, alpha-2 or alpha-3 format. Searching an ISO code returns a struct.

print(IsoCountryCodes.find(key: "020").name) //Andorra
print(IsoCountryCodes.find(key: "TK").name) //Tokelau
print(IsoCountryCodes.find(key: "TKL").currency) //NZD

You can also search by country name, currency or calling/dialing code:

dump(IsoCountryCodes.searchByName("Netherlands")
print(IsoCountryCodes.searchByCurrency("EUR").count ) // 31
print(IsoCountryCodes.searchByCallingCode("+31").first ) // Netherlands

let country = IsoCountryCodes.searchByName("Netherlands")
dump(country) // This dumps the full struct in console

This returns a IsoCountryInfo struct:

β–Ώ IsoCountryCodes.IsoCountryInfo
    - name: Netherlands
    - numeric: 528
    - alpha2: NL
    - alpha3: NLD
    - calling: +31
    - currency: EUR
    - continent: EU

Searching by name is case- and diacritic insensitive:

dump(IsoCountryCodes.searchByName("netherlands"))
dump(IsoCountryCodes.searchByName("NETHERLANDS"))

dump(IsoCountryCodes.searchByName("RΓ©union"))
dump(IsoCountryCodes.searchByName("Reunion"))

If no full match is found, a partial match is tried:

// Full name is "Venezuela, Bolivarian Republic of"
dump(IsoCountryCodes.searchByName("Venezuela"))

but nothing is returned if the search results would be ambiguous:

// There are two Virgin Islands country codes:
// "Virgin Islands, British" and "Virgin Islands, U.S."
dump(IsoCountryCodes.searchByName("Virgin Islands"))

Fun with flags

Retrieve a corresponding emoji flag from a country code. (Thanks to @lorismaz for this addition)

let emojiString = IsoCountries.flag(countryCode: "NL")
// Prints πŸ‡³πŸ‡±

or

let emojiString = IsoCountryCodes.find(key: "USA").flag
// Prints πŸ‡ΊπŸ‡Έ

Retrieve fractional digits

Retrieve fractional digits or decimal places for a country's currency. This can be useful when converting an amount in a certain currency to digits. For example calculating how many cents go into 1 euro (100 cent), or in Kuwaiti dinar; 1 KD = 1000 fils. This is convenient when working with banks or payment providers. (Thanks to @mohameditani for this addition).

func transformToDigits(price: Double, country: IsoCountryInfo) -> Double {
  let fractionDigits = country.fractionDigits
  let amount = price * pow(10.0, Double(fractionDigits))
  return amount
}

let priceOfCoffee = 2.05
let country = IsoCountryCodes.searchByName("Italy") // fractionDigits for Italy is 2
let digits = transformToDigits(priceOfCoffee, country)
// 205 cents

Usage:

Copy/add files to your project

Licence:

The 'do-whatever-you-please-with-it licence. Use it or abuse it. Just keep my name at the top of the files.

GitHub

link
Stars: 99
Last commit: 5 days ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

Added default fractions for country
11 weeks ago

Added default fractions Updated readme with code example

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics