2
それは私が、単純な数のプロトコル持って、おそらく非常にシンプルですが、理由SWIFT用+演算子の私の実装を好きではない...
:スウィフトあいまいなオーバーロードされた+演算子
protocol Number : CustomStringConvertible {
var doubleValue: Double { get }
}
を同様の単純な実装:
struct SimpleNumber : Number {
let doubleValue: Double
let description: String
init(_ double: Double) {
doubleValue = double
description = "\(double)"
}
}
とオペレータのオーバーロードのための拡張:
extension Number {
static func + (lhs: Number, rhs: Number) -> Number {
return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}
}
これまでのところ、とても良いです。しかし、今、私はその演算子を使用しようとするとき:
let number1: Number = SimpleNumber(1)
let number2: Number = SimpleNumber(2)
let number3: Number = number1 + number2;
Xcodeは、演算子があいまいであることを知らせます。
だから、なぜですか?私の定義は2つのNumber
オブジェクトに適合する唯一のものです。
私が間違って何をしているのですか?
私はそれが愚かな間違いであることを知っていました...ありがとう! – Jofkos
> 'あなたがしたことは、静的関数Numberを作成したものと思われます。+'また、拡張機能経由でプロトコルに関数を追加するようにも、この拡張機能を実装するすべての型にデフォルトの実装で新しい関数を追加します。だから多分質問からのコードは同じ署名 'Number。+' *と* 'SimpleNumber。+'を持つ2つの**静的関数を作成し、後者は既定で前者を呼び出します。それはあいまいさの原因かもしれません。 – user28434