2017-12-17 11 views
0

Gibt es eine bessere Möglichkeit, dies zu codieren, ohne magische "en", "es" -Strings zu verwenden?Swift NSLocale Programmierkonstanten

let pre = Locale.preferredLanguages[0] 
if pre == "en" 
    .... 
    else if pre == "es" 
    .... 
    else if pre == "xx" 
    .... 

Ich dachte Zeitfehler zu erhalten kompilieren und nicht einen Fehler zu machen dies würde

let pre = Locale.preferredLanguages[0] 
if pre == NSLocale.something.ENGLISH 
    .... 
    else if pre == NSLocale.something.SPANISH 
    .... 
    else if pre == //and so on 
    .... 

besser sein, aber ich kann nichts finden.

Ist das der richtige Weg zu programmieren?

+0

Sie könnten Ihre eigenen Konstanten erstellen. – ryantxr

+0

Machen Sie eine Erweiterung von Locale und machen Sie den Sprachsatz mit Ihrem Sprachkonstantennamen. –

Antwort

0

Erstellen Sie für die Sprachen, die Sie in Ihrer App unterstützen möchten, ein Enum, das preferredLanguages ​​einem Enum-Case zuordnet. Das unten gezeigte Beispiel fügt Fälle für Englisch und Spanisch hinzu.

// Create an enum that maps known language "Strings" to a case statement. 
public enum LanguageMap : String{ 
    // Add a case for all the languages you app will support 
    case English = "en" 
    case Spanish = "es" 
} 

Locale Extend eine Eigenschaft hinzuzufügen, die eine [LanguageMap] Objekte anstelle von [String] zurückkehren wird.

// Extend the Locale class to return 

extension Locale{ 
    public static var preferredLanguageMap : [LanguageMap] { 
     let langMap = Locale.preferredLanguages.flatMap({return LanguageMap.init(rawValue: $0) }) 
     return langMap 
    } 
} 

in Ihrer Anwendung ersetzen Sie die if-else Anweisung mit einer Erklärung Schaltergehäuse.

// Your application Logic. 

switch Locale.preferredLanguageMap.first! { 

case .English : 
    print("Do Something the English Way") 

case .Spanish : 
    print("Do Something the Spanish Way") 

default: 
    print("Do Anything... Throw an error/Default Handling.") 
    // Note : Locale.availableIdentifiers has 789 language identifiers till date. 
    // This could also change in the future. 
    // Ensure you have some default logic for all 'other languages' here. 
} 
Verwandte Themen