は問題があなたの2つの拡張を使用すると、単一の拡張子を持つ 同じ警告になるだろう、衝突していないことを
extension Collection where Indices.Iterator.Element == Index { }
短い答えさ:ちょうどあなたの宣言から冗長な制約を削除します。
extension MutableCollection { ... }
extension Collection { ... }
説明:スウィフト3は、関連する 種類を制限することはできませんでした。 Indices.Iterator.Element == Index
はすべてのコンクリートのコレクション(配列、ArraySlice、セット、...)のための 満足した場合であっても、 言語がはそれを必要としませんでした。そのため、必要に応じて この制約をエクステンションに追加する必要がありました。
スウィフト4では、関連付けられたタイプをwhere
句で拘束できます。SE-0142 Permit where clauses to constrain associated typesを参照してください。
Collection
プロトコルは
associatedtype Indices : Sequence = DefaultIndices<Self>
where Self.Index == Self.Indices.Element, ...
を定義し、Sequence
プロトコルが
associatedtype Element where Self.Element == Self.Iterator.Element
を定義だから我々は常にアイデンティティ
Indices.Iterator.Element == Indices.Element == Index
を持っているので、あなたのコードからこれらの制約を削除することができます。