2016-09-17 4 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)は同じものでなければなりません。今では、私はちょうどのためのオプションの文字列としてテキストを取っていて、NumberFormatter celsiusLabel.textに名前が変更されました

てNumberFormatter = NSNumberFormatter()// -

答えて

4

Swift 3では、NSNumber(value)は機能しません。あなたの値がIntであるとしましょう。その場合はNSNUmber(value: yourIntValue)が必要です。 Swift 3では、関数呼び出しの最初の(そしてこの場合は唯一の)パラメータの名前が必要です。だから、あなたの

value as NSNumber 

作品の使用が、

NSNumber(value: yourNumberValue) 

はあまりにも動作します。

+0

と同じです。それはリンゴからの奇妙な脱獄のようなものですが、私は今それを手に入れます。 – Ruvi

0

私はここにいくつかの仮定をとっているまず第一に、私が想定していますたとえば、同じものに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? 編集を申し訳ありませんが、常にシフトの代わりに入力してください – Ruvi

+0

を入力してください。NSNumberの初期化の正しい構文は、NSNumber(値:値) – Jeet

関連する問題