4

我对转换错误有点困惑。

我将我的项目从 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.0Type(value)中现在禁止强制转换,但我检查了一下,我绝对没有收到编译器警告。有人可以告诉我有什么问题NSNumber(value)吗?

据我了解value as NSNumberNSNumber(value)应该是一样的。

4

2 回答 2

4

在 Swift 3 中,NSNumber(value)将无法正常工作。假设您的值是一个 Int。在这种情况下,您需要NSNUmber(value: yourIntValue). 在 Swift 3 中,您必须拥有函数调用中第一个(在这种情况下也是唯一一个)参数的名称。所以,你的使用

value as NSNumber

有效,但是

NSNumber(value: yourNumberValue)

也可以。

于 2016-09-17T16:02:55.373 回答
0

首先我在这里做了一些假设,我假设 -

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 = "???"
    }
}

如果您有任何疑问,请随时发表评论,希望对您有所帮助。

于 2016-09-17T15:59:10.857 回答