2016-09-17 13 views
4

변환 오류에 대해 다소 혼란 스럽습니다. Xcode 8.0 및 Swift 3.0 변환 : 특정 변환 오류에 대한 설명을 찾고

은 내가 먼저 내가 스위프트 3.0 캐스트에 Type(value) 지금은 금지 된 생각에서 스위프트 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 = "???" 
    } 
} 

에 스위프트 2.3 내 프로젝트 양식을 마이그레이션,하지만 난 확인하고 나는 전혀 컴파일러 경고를 얻을. 누군가 NSNumber(value)의 문제가 무엇인지 말해 줄 수 있습니까?

내가 이해하는 한 value as NSNumberNSNumber(value)은 같은 것이어야합니다.

내가 여기에 몇 가지 가정을 촬영 한 모든

답변

4

스위프트 3에서 NSNumber(value)은 작동하지 않습니다. 여러분의 가치가 Int라고 가정 해 봅시다. 이 경우 NSNUmber(value: yourIntValue)이 필요합니다. Swift 3에서는 함수 호출에서 첫 번째 매개 변수 (이 경우에는 유일한 매개 변수)의 이름을 가져야합니다. 그래서, 당신의

value as NSNumber 

작품의 사용하지만,

NSNumber(value: yourNumberValue) 

도 작동합니다.

+0

Ok, 그것은 사과로부터의 이상한 탈퇴의 종류 다. 그러나 나는 지금 그것을 얻는다. – Ruvi

0

첫째, 가정 한 그 -

NumberFormatter는 = NSNumberFormatter() // 지금은 그냥 (선택 사양) 문자열로 텍스트를 복용하고 NumberFormatter는 celsiusLabel.text로 이름이 바뀌 었습니다 예를 들어 label.text를 사용할 수 있습니다.

위의 가정 후 스위프트 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 = "???" 
    } 
} 

.

+0

답변 주셔서 감사합니다. 그러나 귀하의 솔루션이 문제를 해결하는 방법을 알 수 없습니다. 나는 당신의 솔루션을 시도했지만 여전히 같은 문제입니다. numberFormatter.string 함수는 값이 NSNumber가 아니기 때문에 (사용자의 경우) 값을 거부합니다. Btw : 올바른 유형이 잘못되었습니다. numberFormatter = NumberFormatter() celsiusValue : Double? 죄송하지만 편집을 위해 항상 Shift 키 대신 Enter 키를 누르십시오. – Ruvi

+0

을 입력하십시오. NSNumber 초기화에 대한 올바른 구문이 NSNumber (값 : 값)와 동일합니다. – Jeet