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