2016-11-24 2 views
1

После этой линииNumberFormatter Аргумент метка «(_ :)» не найдены доступные перегрузок

lable2xValue.text = numberFormatter.string(from: value) 

Сначала это бросает эту ошибку

Невозможно преобразовать значение типа «Double», чтобы ожидать, аргумент типа 'NSNumber'

Затем Xcode предлагают value заменить NSNumber

lable2xValue.text = numberFormatter.string(from: NSNumber(value)) 

Когда я делаю это, то эта ошибка показывает

Аргумент метки '(_ :)' не найдено доступных перегрузкам

Вот мой полный код

//computed property 
    var value2x : Double? { 
     if let value = value1x{ 
      return (value * 2) 
     } 
     else{ 
      return nil 
     } 
    } 
    //objerver  
    var value1x : Double? { 
     didSet{ 
      updateLabel2xValue() 
     } 
    } 

    func updateLabel2xValue(){ 

     if let value = value2x { 
      //lable2xValue.text = "\(value)" 


      //MARK:- ERORR Cannot convert value of type 'Double' to expected argument type 'NSNumber' 
      //lable2xValue.text = numberFormatter.string(from: value) 

      //MARK:- ERROR Argument labels '(_:)' do not match any available overloads 
      lable2xValue.text = numberFormatter.string(from: NSNumber(value)) 

     } 
     else { 
      lable2xValue.text = "???" 
     } 

    } 

    var numberFormatter : NumberFormatter = { 
     let ls = NumberFormatter() 
     ls.numberStyle = .decimal 
     ls.minimumFractionDigits = 0 
     ls.maximumFractionDigits = 2 
     return ls 
    }() 


    @IBAction func textField1xValueEditingChange(_ sender: AnyObject) { 
     //print(self.textField1xValue.text) 
     if let value = self.textField1xValue.text , let doubleValue = Double(value){ 
      value1x = doubleValue 

     }else{ 
      value1x = nil 
     } 
    } 

Примечание: если я пытаюсь таким образом, то он работает нормально

lable2xValue.text = numberFormatter.string(from: 50.33) 

ответ

4

Компилятор хочет

numberFormatter.string(from: NSNumber(value:value)) 

, к сожалению, это не означает, что.

Быстрый намек: ⌘ щелкните на NSNumber, чтобы увидеть доступные инициализаторами в файле декларации.


В качестве альтернативы в текущей версии Swift в Xcode 8.1 вы можете также моста отбрасывать Double в NSNumber

numberFormatter.string(from: value as NSNumber) 
+0

wow Я уже решил принять ваш ответ, но мне нужно сделать несколько минут. спасибо за обновление ответил –

2

Вы должны добавить первую метку параметра value с init из NSNumber.

lable2xValue.text = numberFormatter.string(from: NSNumber(value: value)) 
+0

спасибо за ваш ответ –

+0

@cristanlika Приветствую вас! –

Смежные вопросы