簡體   English   中英

Swift通用數組Equatable轉換

[英]Swift Generic array Equatable casting

我有一個包含通用數組的AAA類。 由於Item可能不是Equatable,所以我不將其編碼為class AAA<Item: Equatable>

我想在AAA類中添加一個remove函數,當Item為Equatable時可用。 通過調用此函數,它將在數組擴展中調用一個函數。

由於默認情況下Item不等於,因此以下代碼無法編譯。

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)
}

有什么想法或建議嗎? 謝謝

若要僅在Item是可等於的情況下為AAA<Item>定義函數,只需將定義放入類的受限擴展中:

class AAA<Item> {
    var items = [Item]()
}

extension AAA where Item: Equatable {

    func remove(item: Item) {
        items.remove(object: item)
    }
}

您的方法行不通,因為您仍然可以在任何AAA<Item>實例上調用remove方法,而Item不能為Equatable

換句話說:您需要限制類的通用類型Item ,而不是remove()的參數類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM