问题是 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 是一个 class 函数,并且在初始化时可用。
或者,如果您不想为此定义显式函数,只需为计算属性语法使用闭包:
dynamic var country: String {
let locale = NSLocale.currentLocale()
let countryCode = locale.objectForKey(NSLocaleCountryCode) as String
let countryName = locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
return countryName!
}
或者第三个选项,如果你想保持你的功能,你必须在初始化后设置县变量,如:
dynamic var country: String!
override func viewDidLoad() {
super.viewDidLoad()
country = currentCountry()
}