2014-12-18 2 views
1
내가 초기 값으로 현재의 로케일 국가를 설정하기 위해 노력하고있어

:누락 된 인수 설정 초기 값

class Location: RLMObject { 
    dynamic var country = currentCountry() 

    func currentCountry() -> String!{ 
     let locale = NSLocale.currentLocale() 
     let countryCode = locale.objectForKey(NSLocaleCountryCode) as String 

     let countryName = locale.displayNameForKey(NSLocaleCountryCode, value: countryCode) 
     return countryName 
    } 
} 

답변

1

문제는 그 나라가 변수 예를입니다 및 currentCountry가 인 인스턴스도 작동합니다. 국가를 초기화하려면 인스턴스가 아직 없으므로 currentCountry 함수를 참조 할 수 없습니다. 그러나이 같은 변경하는 경우 :

dynamic var country = YOUR_CLASS_NAME.currentCountry() 

class func currentCountry() -> String!{ 
    let locale = NSLocale.currentLocale() 
    let countryCode = locale.objectForKey(NSLocaleCountryCode) as String 

    let countryName = locale.displayNameForKey(NSLocaleCountryCode, value: countryCode) 
    return countryName 
} 

지금 currentCountry가 클래스 기능입니다 beacuse는, 작동, 그것은 초기화에 사용할 수 있습니다.

또는 당신이에 대한 명시 적 함수를 정의하지 않으려면, 단지 계산 된 속성 구문에 대한 폐쇄를 사용 : 당신은 당신의 기능을 유지하려는 경우, 당신을

dynamic var country: String { 
    let locale = NSLocale.currentLocale() 
    let countryCode = locale.objectForKey(NSLocaleCountryCode) as String 

    let countryName = locale.displayNameForKey(NSLocaleCountryCode, value: countryCode) 
    return countryName! 
} 

또는 세 번째 옵션을 다음과 같이 초기화 후 county 변수를 설정해야합니다.

dynamic var country: String! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    country = currentCountry() 
} 
0

Xcode Simulator iOS 8.1의 버그입니다.

locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)

에 대해 nil을 반환합니다.