2017-12-17 19 views
0

마법 "en", "es"문자열을 사용하지 않고 이것을 코딩하는 더 좋은 방법이 있습니까? Swift NSLocale 프로그래밍 상수

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

나는 시간 오류를 컴파일 얻을 생각하지 만드는 실수를이

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

좋을 것이다하지만 난 아무것도 찾을 수 있었다.

코드를 작성하는 것이 올바른 방법입니까?

+0

고유 한 상수 세트를 만들 수 있습니다. – ryantxr

+0

Locale을 확장하고 언어 상수 이름으로 언어 세트를 만듭니다. –

답변

0

앱에서 지원하려는 언어의 경우 preferredLanguages를 enum 케이스에 매핑하는 enum을 만듭니다. 아래의 내용은 영어와 스페인어의 경우를 추가합니다.

// 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" 
} 

대신 [String][LanguageMap] 개체를 반환하는 속성을 추가 Locale을 확장합니다. 응용 프로그램에서

// 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 
    } 
} 

, 스위치 케이스 문으로 if-else 문을 대체합니다.