【问题标题】:Remove array items from array从数组中删除数组项
【发布时间】:2015-05-21 13:47:07
【问题描述】:

我正在尝试编写一个数组扩展,如果它们存在于另一个数组中,我将允许我从数组中删除它们。我需要将它用于一系列自定义类型,因此试图构建一些通用的东西。

这是我到目前为止返回的错误“二元运算符 == 不能应用于两个 t 操作数”

extension Array{


    mutating func removeArrayItems<T>(itemsToRemove: [T]){

        for item in itemsToRemove{
            var removed = removeObject(item)
        }
    }


    mutating func removeObject<T>(object: T) -> Bool {
        for (idx, objectToCompare) in enumerate(self) {
            if let to = objectToCompare as? T {
                if object == to {
                    self.removeAtIndex(idx)
                    return true
                }
            }
        }
        return false
    }

}

【问题讨论】:

    标签: arrays swift generics


    【解决方案1】:

    相等运算符== 仅适用于Equatable 的对象。您需要将您的类型T 限定为T:Equatable。因此:

    mutating func removeObject<T:Equatable>(object: T) -> Bool {
      // ...
    }
    

    removeArrayItems相同

    请注意,如果您要定义自己的类型,例如使用classstruct,您的类型也需要符合Equatable。像这样:

    class Foo : Equatable {
      // ...
    }
    
    public func ==<T:Foo> (lhs:T, rhs:T) -> Bool {
      // ...
    }
    

    【讨论】:

    • 太棒了!为此非常感谢。现在得到那个编译。但是我仍然遇到的问题是我似乎无法使用自定义类型的数组来调用它。但是,它适用于您的标准类型。例如var arrayTimings: [Timing] = [Timing]() //填充数组scheduledTimings.removeArrayItems(arrayTimings)
    • 完美!非常感谢朋友
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2021-08-14
    • 2014-09-21
    • 2019-08-22
    • 2013-10-28
    • 2011-01-04
    • 2013-06-08
    相关资源
    最近更新 更多