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
내가 초기 값으로 현재의 로케일 국가를 설정하기 위해 노력하고있어
A
답변
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
을 반환합니다.