2017-09-17 12 views
1

Xcode 9 GM(Swift 4)では、なぜDoubleの値をAnyに変換できないのですか?

エラー:指定したタイプに 'Double'タイプの値を 'Any'に変換できません。コードの

var a: Any? = +30.0 

なぜ?

+2

はバグ(3.1からの回帰)、現在のように思えます。私はここに少なくとも2つの暗黙的な変換が存在すると考えています(コンパイラの混乱につながる可能性があります): 'Any'インスタンスが' Any'になっているだけでなく、オプションではありません。あなたがこれについて公開されているバグレポートを見つけることができない場合は、おそらくあなた自身で申請することを検討すべきです。特に、浮動小数点リテラル上の '-'接頭辞演算子を使用すると(上記のユースケースでは)有効です。 – dfri

+0

あなたのコメントを回答したら、私はそれを受け入れます。ありがとう。 –

+0

私はSwiftのソースコードを掘り下げる時間はないと思うので、コメントとして残しておきますが、SwiftのJIRAでバグレポートを投稿することも適切でしょう。あなたは確かな答えです)。私が推測してみると、「Double」、「Float」、「Int」のすべてが「Numeric」のデフォルト実装に戻っていると思うので、「Numeric」がここの犯人の一部になる可能性があると私は信じています。 + '接頭辞演算子は数値リテラルの使用例では、' -'接頭演算子の独自のオーバーロードを持っています。 ... – dfri

答えて

1

+が混乱しています。

var a: Any? = 30.0 

作品。

それともDoubleを作成して、それを割り当てることができます。リテラル浮動小数点への過負荷に接頭辞 `` +演算子を適用するとき

var a: Any? = Double(+30.0) 
+0

"+"を使用すると、ロジックがコンテキスト内で明白になります。なぜ私はそれを取り除く必要がある好奇心。すべて同じようにありがとう。 –

+2

この回答は回避策(バグ?)をカバーしているので、完全性のために、リテラル式を使用して非オプションの 'Double'を明示的に構築する代わりに、リテラル式を使用して' Optional'を作成しますラップされた型を指定する必要がない場合: 'let a:Any? = .some(+ 30.0) '。これらの変換は、コンパイラが型を推測して代入を実行しなかったことと強く関連しています(例えば 'let a:Any = + 30.0'も動作し、暗黙の変換も削除されます) 。 – dfri

+0

私の場合、ダブル(+ 30.0)が動作します。ありがとう。 –

関連する問題