设置初始值时,在调用中缺少参数#1的参数

时间:2014-12-18 10:42:19

标签: swift ios8 realm

我尝试将当前区域设置国家/地区设置为初始值:

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
    }
}

2 个答案:

答案 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)