私は、一般的な配列を含むクラスAAAを持っています。 の項目はEquatableではない可能性がありますので、私はclass AAA<Item: Equatable>
としてコード化しません。スウィフトジェネリックアレイ等価キャスト
ItemがEquatableのときに使用できるAAAクラスのremove関数を追加したいと考えています。この関数を呼び出すと、配列拡張の関数が呼び出されます。
の項目は、デフォルトではEquatableではないため、次のコードはコンパイルできません。次のステップで
class AAA<Item>
{
var items = [Item]()
func remove(item: Item)
{
items.remove(object: item)
}
}
extension Array where Element: Equatable
{
// Remove first collection element that is equal to the given `object`:
mutating func remove(object: Element)
{
if let index = index(of: object)
{
remove(at: index)
}
}
}
、私はEquatableへ項目とアイテムを変換してみてください。しかし、の項目の配列をEquatable要素の配列にチェックしてキャストする方法はありません。
func remove<ItemEquatable: Item> (item: ItemEquatable) where ItemEquatable: Equatable
{
items.remove(object: item)
}
ご意見やご提案はありますか?それでも メソッド削除を呼び出すことができますので、あなたのアプローチは働くことができない
class AAA<Item> {
var items = [Item]()
}
extension AAA where Item: Equatable {
func remove(item: Item) {
items.remove(object: item)
}
}
:Item
がequatableであれば、 は単にクラスの制限された拡張子に定義を入れるだけAAA<Item>
する関数を定義するには感謝