【问题标题】:Missing argument for parameter #1 in call when setting initial value设置初始值时调用参数#1 缺少参数
【发布时间】:2014-12-18 10:42:19
【问题描述】:

我正在尝试将当前语言环境国家设置为初始值:

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

【问题讨论】:

    标签: swift ios8 realm


    【解决方案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 是一个 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()
    }
    

    【讨论】:

      【解决方案2】:

      这是Xcode Simulator iOS 8.1 的错误。

      它为locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)返回nil

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多