Преобразование Xcode 8.0 и Swift 3.0: ищите объяснение конкретной ошибки преобразования

Я немного смущен ошибкой конвертации.

Я перенес свой проект из 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) должно быть то же самое.

2 ответа

Решение

В Свифте 3 NSNumber(value) не сработает Допустим, ваша ценность - Int. В этом случае вам нужно NSNUmber(value: yourIntValue), В Swift 3 у вас должно быть имя первого (и в данном случае единственного) параметра в вызове функции. Итак, ваше использование

value as NSNumber

работает, но

NSNumber(value: yourNumberValue)

тоже работает

Прежде всего, я сделал здесь некоторое предположение, я предположил, что -

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

Надеюсь, это поможет вам оставить комментарий, если у вас есть какие-либо сомнения.

Другие вопросы по тегам