次のように、CGFloatの「=」演算子をオーバーライドしたいと思います。
func = (inout left: CGFloat, right: Float) {
left=CGFloat(right)
}
だから私は次のことをすることができました:
var A:CGFloat=1
var B:Float=2
A=B
これはできますか?エラーExplicitly discard the result of the closure by assigning to '_'
ドキュメント で概説されているように、それは不可能です:
デフォルトの代入演算子(=)をオーバーロードすることはできません。複合割り当て演算子のみをオーバーロードできます。同様に、3項条件演算子(a?b:c)はオーバーロードできません。
それでも納得できない場合は、演算子を+=
に変更してください。
func +=(left: inout CGFloat, right: Float) {
left += CGFloat(right)
}
コンパイルエラーが発生しなくなります。
誤解を招くエラーメッセージが表示されるのは、おそらくコンパイラがオーバーロードの試みを割り当てとして解釈しているためです。
割り当てをオーバーライドすることはできませんが、場合によっては別の演算子を使用できます。例えば &=
演算子。
func &= (inout left: CGFloat, right: Float) {
left = CGFloat(right)
}
したがって、次のことができます。
var A: CGFLoat = 1
var B: Float = 2
A &= B
ちなみに演算子&+
、&-
、&*
Swiftに存在します。これらは、オーバーフローのないCスタイルの操作を表します。 その他