Xcode 8.0 和 Swift 3.0 转换:寻找特定转换错误的解释
Xcode 8.0 and Swift 3.0 conversion: Looking for explanation for a particular conversion error
我对转换错误有点困惑。
我将我的项目从 Swift 2.3 迁移到 Swift 3.0
func updateCelsiusLabel() {
if let value = celsiusValue {
//This was the original code (that worked but is) failing after migration
//due to: Argument labels do not match any available overloads
celsiusLabel.text = numberFormatter.string(from: NSNumber(value))
//This is my code trying to fix this issue and the project is now compiling
//and everything is fine
celsiusLabel.text = numberFormatter.string(from: value as NSNumber)
}
else { celsiusLabel.text = "???"
}
}
起初我以为在 Swift 3.0 中强制转换 Type(value)
现在被禁止了,但我检查了一下,我完全没有收到编译器警告。有人可以告诉我 NSNumber(value)
的问题是什么吗?
据我了解value as NSNumber
和NSNumber(value)
应该是一回事。
首先我在这里做了一些假设,我假设 -
numberFormatter = NSNumberFormatter() // 现在它已经重命名为 NumberFormatter
celsiusLabel.text 我将文本作为可选字符串,例如,您可以使用 label.text 来实现相同的效果。
在上述假设之后,请看下面的代码,它将在 Swift 3 -
中运行
var celsiusValue:Double?
var numberFormatter = NumberFormatter()
var text:String?
func updateCelsiusLabel() {
if let value = celsiusValue {
//This was the original code (that worked but is) failing after migration due to: Argument labels do not match any available overloads
text = numberFormatter.string(from: NSNumber(value: value))!
}
else {
text = "???"
}
}
如果您有任何疑问,请随时发表评论,希望对您有所帮助。
在Swift3中,NSNumber(value)
将不起作用。假设您的价值是一个 Int。在这种情况下,您需要 NSNUmber(value: yourIntValue)
。在 Swift 3 中,您必须拥有函数调用中第一个(在本例中是唯一的)参数的名称。所以,你对
的使用
value as NSNumber
有效,但是
NSNumber(value: yourNumberValue)
也有效。
我对转换错误有点困惑。
我将我的项目从 Swift 2.3 迁移到 Swift 3.0
func updateCelsiusLabel() {
if let value = celsiusValue {
//This was the original code (that worked but is) failing after migration
//due to: Argument labels do not match any available overloads
celsiusLabel.text = numberFormatter.string(from: NSNumber(value))
//This is my code trying to fix this issue and the project is now compiling
//and everything is fine
celsiusLabel.text = numberFormatter.string(from: value as NSNumber)
}
else { celsiusLabel.text = "???"
}
}
起初我以为在 Swift 3.0 中强制转换 Type(value)
现在被禁止了,但我检查了一下,我完全没有收到编译器警告。有人可以告诉我 NSNumber(value)
的问题是什么吗?
据我了解value as NSNumber
和NSNumber(value)
应该是一回事。
首先我在这里做了一些假设,我假设 -
numberFormatter = NSNumberFormatter() // 现在它已经重命名为 NumberFormatter celsiusLabel.text 我将文本作为可选字符串,例如,您可以使用 label.text 来实现相同的效果。
在上述假设之后,请看下面的代码,它将在 Swift 3 -
中运行var celsiusValue:Double?
var numberFormatter = NumberFormatter()
var text:String?
func updateCelsiusLabel() {
if let value = celsiusValue {
//This was the original code (that worked but is) failing after migration due to: Argument labels do not match any available overloads
text = numberFormatter.string(from: NSNumber(value: value))!
}
else {
text = "???"
}
}
如果您有任何疑问,请随时发表评论,希望对您有所帮助。
在Swift3中,NSNumber(value)
将不起作用。假设您的价值是一个 Int。在这种情况下,您需要 NSNUmber(value: yourIntValue)
。在 Swift 3 中,您必须拥有函数调用中第一个(在本例中是唯一的)参数的名称。所以,你对
value as NSNumber
有效,但是
NSNumber(value: yourNumberValue)
也有效。