最近在学swift,想要像OC一样,从数组删除特定元素(removeObject),swift的数组本身没有这个功能,于是便想用extension来实现,没想到却遇到了麻烦。
extension的时候,不能写Array<>,这就导致出现一个问题,因为需要用===比较是否为同一个元素,但是只有AnyObject可以===,而数组元素并没有限定为AnyObject,最后几番折腾,终于在StackOverflow上面找到了解决方案:
extension Array { // Remove certain object in the array. mutating func removeObject<X: AnyObject>(obj: X) { for (idx, one) in enumerate(self) { if one as X === obj { self.removeAtIndex(idx) break } } } }
要注意的是,其中的one as X不能写作one as AnyObject,否则会得到如下编译错误:
Cannot downcast from 'T' to non-@objc protocol type 'AnyObject'
然后,测试的时候,却又神奇的发现,并非只有以类为元素的数组可以使用,Int数组也可以正常removeObject。