私は遊び場にいくつかのサンプルコードを書いていて、SwiftのStrideableプロトコルに準拠する2つの値の距離を返す関数を求めていましたので、distance(to other: Self) -> Self.Stride
関数。Generic Where Swiftで関連付けられた型のあいまいさ
func distanceFrom<T: Strideable, U>(_ a: T, to b: T) -> U where T.Stride == U
{
return a.distance(to: b)
}
しばらくの間、この機能を観察した後、私はストライドがa
からかb
から、where句に1を使用していたかわからなかったことに気づき、次のように私の実装でした。私が理解するところでは、a
とb
は、Stride
の異なる関連タイプを定義することが可能です。また、a.Stride == b.Strideを確実にするためのステートメントは作成していませんが、where節を展開することができます。
だから、等価性を確認するのにどれがU
になるのでしょうか?明確にするために、問題はこの特定のコードブロックではなく、むしろこのあいまいさが存在する状況である。
私は、aとbはどちらもStrideableプロトコルに準拠していると信じていますが、それらは異なるタイプである可能性があります。私は、この関数をIntとbをDoubleにして呼び出すことをテストし、コンパイルして期待通りに実行します。 – tnev
私の回答に追加したスクリーンショットとコードスニペットを使用して、もう一度お試しください。私は彼ら(両方のTの)が同じタイプでなければならないと信じています。 – Underhill