Duration と Frequency (逆の Duration) を表す値の型があります。それらを使って計算したいので、特に次の演算子のオーバーロードがあります。
func * (a:Frequency, b:Duration) -> Double {
return a.numerator * (b / a.denominator)
}
私はこれらをグラフィックス コードで頻繁に使用するためCGFloat
、Double
. そこで、次の砂糖を加えました。
func * (a:Frequency, b:Duration) -> CGFloat {
return CGFloat(a * b)
}
これはSwift2.2でうまくいきました。コンパイラは、予想される戻り値の型に基づいて適切なものを見つけて適用したようです。しかし、Swift3 では、これはもはや当てはまらないように見えますか? Ambiguous use of operator '*'
エラーが発生します。元の関数とエラーのある関数の 2 つの候補が見つかったこともわかります。
これは、Swift3 で予定されている変更で予想されることですか? それは私が以前に逃げたものですが、持つべきではありませんか?それとも回帰?
アップデート
これを行うために、独自の特別なクラスは必要ありません。XCode7 プレイグラウンドでは、以下は問題ありません。
func * (a:String, b:Double) -> Double {
return Double(a)! * b
}
func * (a:String, b:Double) -> CGFloat {
return CGFloat(a * b)
}
let x:CGFloat = "4.2" * 3.0
let y:Double = "-1.1" * 22.2
しかし、XCode8 では上記のエラーで失敗します