刚刚将项目转换为Swift 3并且无法找出以下错误。
public func currencyString(_ decimals: Int) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = decimals
return formatter.string(from: NSNumber(self))!
}
返回行显示错误"参数标签'(_:)'不匹配任何可用的重载"
知道需要改变什么来解决这个问题
答案 0 :(得分:56)
你可以这样做:
public func currencyString(_ decimals: Int) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = decimals
return formatter.string(from: NSNumber(value: decimals))!
}
因为如果你检查NSNumber
,你会得到预定义的init,如:
public init(value: Int)
答案 1 :(得分:9)
澄清错误是什么的混淆,
NSNumber正在调用NSNumber.init( value: X )
方法来实例化NSNumber对象。
"参数标签' (_:)
'不匹配任何可用的重载"
代码产生错误,因为NSNumber不是类型,而是具有成员的类。 "NSNumber(...)"
实例化一个类对象,以包含(1.0 / 1.29)
的' 值' 。
这不是C / C ++中的类型转换或转换。您尝试 强制转换 类型以允许编译器做好自己的工作。
float y = 1.3;
int x = int( y );
NSNumber不是类似int, float, char
错误发挥作用,因为有几种方法可以调用NSNumber.init( value: type )
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视为来自遗产?
答案 2 :(得分:2)
这个怎么样?
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)
}
答案 3 :(得分:0)
尽管接受的答案显示了如何正确调用NSNumber
初始化程序,但很高兴知道,如果我们使用NSNumber
方法,则没有理由将Swift数字转换为string(for:)
而不是string(from:)
。
return formatter.string(for: self)!
答案 4 :(得分:-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)