最近在学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。