首页 文章

swift 3错误:参数标签'(_:)'与任何可用的重载都不匹配

提问于
浏览
37

刚刚将项目转换为Swift 3并且无法找出以下错误 .

public func currencyString(_ decimals: Int) -> String {

    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.maximumFractionDigits = decimals
    return formatter.string(from: NSNumber(self))!
}

返回行显示错误“Argument labels'(_ :)'与任何可用的重载都不匹配”

知道需要改变什么来解决这个问题

4 回答

  • 57

    你可以这样做:

    public func currencyString(_ decimals: Int) -> String {
    
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        formatter.maximumFractionDigits = decimals
        return formatter.string(from: NSNumber(value: decimals))!
    }
    
  • 2

    澄清关于错误是什么的混淆,

    NSNumber正在调用 NSNumber.init( value: X ) 方法来实例化NSNumber对象 .

    "Argument labels '(_:)' do not match any available overloads"

    代码产生错误,因为NSNumber不是类型,而是具有成员的类 . "NSNumber(...)" 实例化一个类对象以包含 (1.0 / 1.29)(1.0 / 1.29) .

    This is not a type conversion or cast like in C/C++. 您正在尝试 cast 类型以允许编译器完成其工作 .

    float y = 1.3;
    int x = int( y );
    

    NSNumber不是像 int, float, char 这样的类型

    该错误发挥作用,因为有几种方法可以调用 NSNumber.init( value: type )

    Swift要求你明确地说你希望NSNumber的'value'成员包含值x .

    let localRate = NSNumber( 1.0 / 1.29)
      var y = NSNumber( 0 )
      var b = NSNumber( false )
    
    
    
       let localRate = NSNumber(value: 1.0 / 1.29)
       var y = NSNumber( value: 0 )
       var b = NSNumber( value: false )
    

    混乱可能会发挥作用,因为这是有效的 .

    w = String( "4" )
    

    类String不需要参数标签,而NSNumber确实需要参数标签'value:'

    也许这是因为IOS如何将NSNumber视为来自传统?

  • 0

    那这个呢?

    override func viewDidLoad() {
            super.viewDidLoad()
            self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "backButton")
            self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "backButton")
            self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", barButtonSystemItem: UIBarButtonItemStyle.Plain, target: nil, action: nil)
    }
    
  • 8

    Swift 3.0.1

    public func currencyString(_ decimals: Int) -> String {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .currency
        numberFormatter.formatterBehavior = .default
        let priceString = numberFormatter.string(from: NSNumber(value:product.introPrice))
        return priceString!
    }
    

    syntex之间的区别

    // Old code
    formatter.string(from: NSNumber(product.introPrice))!
    
    // swift 3.0.1
    formatter.string(from: NSNumber(value:product.introPrice)
    

相关问题