swift数组只有一个
var dataSource = ["A","B","C","D"]
dataSource.remove(at: i)
如果我要实现类似OC数组的removeObject方法咋办呢?
网上有人解答的思路是这样的:首先,找到数组中该元素所在的位置,然后使用remove(at: i)方法移除。
例如:
for item in self.userList {
var i = 0
for userItem in self.sendModel.arrayOfUserList {
if item.userID == userItem.userID {
self.sendModel.arrayOfUserList.remove(at: i)
break
}
i += 1
}
}
这种方式固然可行,但swift显然不希望我们这样做!
我们知道,swift有一个新的类型集合Set,如果我们用集合Set代替数组,就变得简单了太多了!
var selectData : Set<Int> = [1,2,4,6]
//移除某个元素
selectData.remove(indexPath.row)
//插入某个元素
selectData.insert(indexPath.row)
//是否包含某个元素
selectData.contains(indexPath.row)
集合可以看做是一种特殊的数组,为啥这样说呢?请仔细看两者的初始化!例子中两者的初值都是一个数组[,,,],但对于集合而言,我给它指定了一个类型叫集合!
那么集合相对数组,特殊在哪里呢?
1、集合是无序的,所以你不能像数组一样,通过索引找到集合中某个元素
2、集合中的元素是不重复的,数组可以有多个重复的值,对集合而言,不会有重复的元素。
显然,对于我们需要筛选的业务场景而言,集合显得更加适用!我们不需要考虑重复,只需要contains、remove、insert三种操作就可以简单实现我们的需求。
第二种方法 为Array类添加扩展
extension Array where Element: Equatable {
mutating func remove(_ object: Element) {
if let index = index(of: object) {
remove(at: index)
}
}}