Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 扩展Swift数组以复制IndexOfoObject函数_Ios_Objective C_Swift - Fatal编程技术网

Ios 扩展Swift数组以复制IndexOfoObject函数

Ios 扩展Swift数组以复制IndexOfoObject函数,ios,objective-c,swift,Ios,Objective C,Swift,我一直在尝试用Big Nerd Ranch最新的iOS书籍中的Swift实现iOS应用程序 在指南中,有以下方法,其中privateItems是NSMutableArray - (void)removeItem:(BNRItem *)item { [self.privateItems removeObjectIdenticalTo:item] } 因此,在我的Swift实现中,将privateItems作为Swift数组,我希望能够做到这一点: func removeItem(item

我一直在尝试用Big Nerd Ranch最新的iOS书籍中的Swift实现iOS应用程序

在指南中,有以下方法,其中privateItems是NSMutableArray

- (void)removeItem:(BNRItem *)item
{
    [self.privateItems removeObjectIdenticalTo:item]
}
因此,在我的Swift实现中,将privateItems作为Swift数组,我希望能够做到这一点:

func removeItem(item: Item) {
    _privateItems.removeObjectIndenticalTo(item)
}
但是,Swift数组不支持该方法。它具有removeAtIndex方法。我知道我可以通过以下代码实现同样的效果:

func removeItem(item: Item) {
    for (index, element) in enumerate(_privateItems) {
        if element === item {
            _privateItems.removeAtIndex(index)
        }
    }
}
但是,我想为Swift数组创建一个通用扩展,这样我就不必每次都这样做了。这没什么大不了的,但我认为这至少对学习有好处

我已经研究了其他几个SO帖子(和),但没有能够实现我想要的。以下是我的尝试:

protocol Identifiable {
    func ===(lhs: Self, rhs: Self) -> Self
}

extension Array {
    func removeObjectIndenticalTo<T: Identifiable>(object: T) {
        for (index, element) in enumerate(self) {
            if object === element {
                removeAtIndex(index)
            }
        }
    }
}

项是结构还是类<代码>=和
==
仅用于引用类型请注意,IndexOfoObject的等效项将使用==运算符。IndexOfoObject对每个对象调用isEqual,相当于==运算符将只匹配相同的事件(指针比较和内容比较),不幸的是Swift不允许为数组定义扩展
extension Array {
    func contains(#object:AnyObject) -> Bool {
        return self.bridgeToObjectiveC().containsObject(object)
    }
    func indexOf(#object:AnyObject) -> Int {
        return self.bridgeToObjectiveC().indexOfObject(object)
    }
}
protocol Identifiable {
    @infix func ===(a: Self, b: Self) -> Bool
}

struct Item : Identifiable {
    var n : Int
}

@infix func ===(a: Item, b: Item) -> Bool {
    return a.n == b.n
}
var _privateItems = [Item(n:1),Item(n:2),Item(n:2),Item(n:1),Item(n:2)]
func removeItem(item: Item) {
    var tbr : Int[] = []
    for (index, element) in enumerate(_privateItems) {
        if element === item {
            tbr += index
        }
    }
    for i in reverse(sort(tbr)) {
        _privateItems.removeAtIndex(i)
    }
}
removeItem(Item(n:2))

println(_privateItems.count)
removeItem(Item(n:1))
println(_privateItems.count)