Swift 设置初始值时调用中缺少参数#1的参数
我正在尝试将当前语言环境国家设置为初始值:Swift 设置初始值时调用中缺少参数#1的参数,swift,ios8,realm,Swift,Ios8,Realm,我正在尝试将当前语言环境国家设置为初始值: class Location: RLMObject { dynamic var country = currentCountry() func currentCountry() -> String!{ let locale = NSLocale.currentLocale() let countryCode = locale.objectForKey(NSLocaleCountryCode) as
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
}
}
问题是country是一个实例变量,currentCountry也是一个实例函数。当您要初始化country时,还没有实例,因此无法引用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()
}
这是Xcode模拟器iOS 8.1的bug 对于
locale.displayNameForKey(NSLocaleCountryCode,值:countryCode),它返回nil