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")]