Swift 3:如何在数组中找到对象的索引?
我有一个协议:Swift 3:如何在数组中找到对象的索引?,swift,swift3,Swift,Swift3,我有一个协议: protocol MyProtocol : NSObjectProtocol { func MyProtocolUpdated() } 我有一系列协议: var delegates = Array<DataManagerDelegate>() 如何从阵列中删除特定对象 感谢您,在Swift中,从数组中删除对象的一种方法是使用函数编程 delegates.filter({ $0 != objectThatYouwantToRemove }) 此
protocol MyProtocol : NSObjectProtocol {
func MyProtocolUpdated()
}
我有一系列协议:
var delegates = Array<DataManagerDelegate>()
如何从阵列中删除特定对象
感谢您,在Swift中,从数组中删除对象的一种方法是使用函数编程
delegates.filter({ $0 != objectThatYouwantToRemove })
此代码将提供一个数组,该数组将不包含删除对象。您可以使用
index(of:)
函数获取元素的索引。它返回一个可选的整数,因此您必须将其展开。您的DataManagerDelegate
必须符合equalable
if let index = delegates.index(of: delegate) {
delegates.remove(at: index)
}
为了从数组中查找对象,对象需要符合
equalable
,以便数组可以将迭代中的当前项与您尝试查找的项进行比较
为此,在声明协议的地方添加:
extensiondatamanagerdelegate:equalable{}
然后,所有符合DataManagerDelegate
的对象都需要实现
static func==(lhs:Self,rhs:Self)->Bool
函数
之后,您应该能够找到对象的索引。如果要从数组中删除元素,可以使用
var shapes=Array()
var circle1=圆(名称:“circle1”)
var triangle1=三角形(名称:“triangle1”)
var triangle2=三角形(名称:“triangle2”)
shapes.append(圆圈1)
shapes.append(三角形1)
shapes.append(三角形2)
//我们想删除圆一,所以我们过滤它。
shapes=shapes.filter{$0.name!=circle1.name}
打印(形状)
//[三角形(名称:“三角形1”)、三角形(名称:“三角形2”)]
将代理保留在数组中不是一个好主意。代理通常应存储为弱
,以防止所有权循环。数组总是将它们存储为强的…但是如果我在MyProtocol中没有任何属性,只有函数呢?但是我得到了一个错误“如果我使用,就不能用类型为“(of:MyProtocol)”的参数列表调用'index'”
。index(of:)
MyProtocol是否符合equalable
(通过使其符合equalatable
的要求进行了尝试),但是符合MyProtocol
的对象不也应该符合equalable
吗?我不想让MyProtocol的使用者符合equalable。DataManagerDelegate是否符合equalable
?除了使对象(需要符合MyProtocol)之外,没有其他方法了吗实现static func==(lhs:Self,rhs:Self)->Bool
函数?默认情况下,我不知道。如果它不符合equalable,那么数组就不知道如何检查正确的元素,因为它无法比较元素。我说“二进制运算符不能应用于两个MyProtocol操作数”
if let index = delegates.index(of: delegate) {
delegates.remove(at: index)
}
protocol Shape {
var name: String { get set }
}
struct Circle: Shape {
var name = ""
}
struct Triangle: Shape {
var name = ""
}
var shapes = Array<Shape>()
var circle1 = Circle(name: "circle1")
var triangle1 = Triangle(name: "triangle1")
var triangle2 = Triangle(name: "triangle2")
shapes.append(circle1)
shapes.append(triangle1)
shapes.append(triangle2)
// we want to remove the circle one so we filter it.
shapes = shapes.filter { $0.name != circle1.name }
print(shapes)
// [Triangle(name: "triangle1"), Triangle(name: "triangle2")]