我尝试将当前区域设置国家/地区设置为初始值:
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
}
}
答案 0 :(得分:1)
问题是country是 instance 变量,currentCountry也是 instance 函数。如果要初始化国家/地区,则还没有实例,因此您无法引用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是类函数,并且在初始化时可用。
或者,如果您不想为此定义显式函数,只需对计算属性语法使用闭包:
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()
}
答案 1 :(得分:0)
这是Xcode Simulator iOS 8.1
的错误。
它会为nil
locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)