NumberFormatter 参数标签 '(_:)' 不匹配任何可用的重载

Posted

技术标签:

【中文标题】NumberFormatter 参数标签 \'(_:)\' 不匹配任何可用的重载【英文标题】:NumberFormatter Argument labels '(_:)' do not match any available overloadsNumberFormatter 参数标签 '(_:)' 不匹配任何可用的重载 【发布时间】:2016-11-24 11:07:50 【问题描述】:

沿着这条线

 lable2xValue.text = numberFormatter.string(from: value)

首先它抛出这个错误

无法将“Double”类型的值转换为预期的参数类型“NSNumber”

然后Xcode建议value替换成NSNumber

 lable2xValue.text = numberFormatter.string(from: NSNumber(value))

当我这样做时,会显示此错误

参数标签“(_:)”不匹配任何可用的重载

这是我的完整代码

   //computed property
    var value2x : Double? 
        if let  value = value1x
            return (value * 2)
        
        else
            return nil
        
    
  //objerver       
    var value1x : Double? 
        didSet
            updateLabel2xValue()
        
    

    func updateLabel2xValue()

        if let value = value2x 
            //lable2xValue.text = "\(value)"


            //MARK:- ERORR Cannot convert value of type 'Double' to expected argument type 'NSNumber'
            //lable2xValue.text = numberFormatter.string(from: value)

            //MARK:- ERROR Argument labels '(_:)' do not match any available overloads
            lable2xValue.text = numberFormatter.string(from: NSNumber(value))

        
        else 
            lable2xValue.text = "???"
        

    

    var  numberFormatter : NumberFormatter = 
        let ls = NumberFormatter()
        ls.numberStyle = .decimal
        ls.minimumFractionDigits = 0
        ls.maximumFractionDigits = 2
        return ls
    ()


    @IBAction func textField1xValueEditingChange(_ sender: AnyObject) 
        //print(self.textField1xValue.text)
        if let value = self.textField1xValue.text , let doubleValue = Double(value)
            value1x = doubleValue

        else
            value1x = nil
        
    

注意:如果我尝试这种方式,那么它工作正常

lable2xValue.text = numberFormatter.string(from: 50.33)

【问题讨论】:

【参考方案1】:

编译器想要

numberFormatter.string(from: NSNumber(value:value))

不幸的是,它不建议这样做。

快速提示⌘-单击 NSNumber 以查看声明文件中可用的初始化程序。


或者,在 Xcode 8.1 的当前 Swift 版本中,您还可以将 Double 桥接到 NSNumber

numberFormatter.string(from: value as NSNumber)

【讨论】:

哇,我已经决定接受你的回答,但我需要花几分钟时间。感谢更新回答【参考方案2】:

您需要在NSNumberinit 中添加第一个参数标签value

lable2xValue.text = numberFormatter.string(from: NSNumber(value: value))

【讨论】:

@cristanlika 欢迎朋友 :)

以上是关于NumberFormatter 参数标签 '(_:)' 不匹配任何可用的重载的主要内容,如果未能解决你的问题,请参考以下文章

numberformatter(样式货币)删除不起作用

NumberFormatter 分组未按预期工作

PHP 'NumberFormatter' 'SPELLOUT' 没有提供所需的英文格式

PHP NumberFormatter.format() 显示奇怪的输出

来自 NumberFormatter 的本地化货币符号

NumberFormatter 在 Swift 中无法识别来自不同本地的数字 [关闭]