【问题标题】: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)

【问题讨论】:

    标签: ios swift swift3 nsnumberformatter


    【解决方案1】:

    编译器想要

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

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

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


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

    numberFormatter.string(from: value as NSNumber)
    

    【讨论】:

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

    您需要在NSNumber 的init 中添加第一个参数标签value。

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

    【讨论】:

    • @cristanlika 欢迎朋友 :)
    猜你喜欢
    • 2017-08-12
    • 2016-12-16
    • 2018-04-02
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多