刚刚将项目转换为Swift 3并且无法找出以下错误.
public func currencyString(_ decimals: Int) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = decimals
return formatter.string(from: NSNumber(self))!
}
Run Code Online (Sandbox Code Playgroud)
返回行显示错误"Argument labels'(_ :)'与任何可用的重载都不匹配"
知道需要改变什么来解决这个问题
Dha*_*esh 56
你可以这样做:
public func currencyString(_ decimals: Int) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = decimals
return formatter.string(from: NSNumber(value: decimals))!
}
Run Code Online (Sandbox Code Playgroud)
小智 10
澄清关于错误是什么的混淆,
NSNumber正在调用NSNumber.init( value: X )实例化NSNumber对象的方法.
"参数标签' (_:)'与任何可用的重载都不匹配"
代码产生错误,因为NSNumber不是类型,而是具有成员的类."NSNumber(...)"实例化一个类对象包含" 值"的(1.0 / 1.29).
这不是C/C++中的类型转换或转换.你在哪里试图投的类型,让编译器来完成其工作.
float y = 1.3;
int x = int( y );
Run Code Online (Sandbox Code Playgroud)
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 )
Run Code Online (Sandbox Code Playgroud)
混乱可能会发挥作用,因为这是有效的.
w = String( "4" )
Run Code Online (Sandbox Code Playgroud)
类String不需要参数标签,而NSNumber确实需要参数标签'value:'
也许这是因为IOS如何将NSNumber视为来自传统?
| 归档时间: |
|
| 查看次数: |
52835 次 |
| 最近记录: |