Преобразование 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 = "???"
}
}
Надеюсь, это поможет вам оставить комментарий, если у вас есть какие-либо сомнения.