gpt4 book ai didi

arrays - 如何从 Swift 中的协议(protocol)数组中删除一个元素?

转载 作者:IT王子 更新时间:2023-10-29 05:18:59 24 4
gpt4 key购买 nike

Swift 的协议(protocol)实现现在真的让我抓狂。我有一个数组 observers 通过自定义协议(protocol) Observing 定义,我试图从给定元素的数组中删除一个元素,但 Swift 提示 Observing 没有实现 Identifiable(我认为这实际上是我自己的另一个协议(protocol),除非还有一个系统协议(protocol)叫它)。我只想做一个引用比较并删除实际对象。我不关心对对象执行任何类型的比较。

var observers = [Observing]()

func removeObserver( observer: Observing ) {
for i in 0 ..< self.observers.count {
if self.observers[i] == observer { // <='Observing' is not convertible to 'Identifiable'...?
self.observers.removeAtIndex(i)
break
}
}
}

最佳答案

== 运算符检查 Swift 中的值是否相等,并且没有默认实现。你想要的是引用相等性,你可以在 Swift 中使用 ===!== 来获得。

参见 the documentation了解更多详情。

Identity Operators

Because classes are reference types, it is possible for multiple constants and variables to refer to the same single instance of a class behind the scenes. (The same is not true for structures and enumerations, because they are always copied when they are assigned to a constant or variable, or passed to a function.)

It can sometimes be useful to find out if two constants or variables refer to exactly the same instance of a class. To enable this, Swift provides two identity operators:

Identical to (===) Not identical to (!==)

请注意,要使 === 运算符起作用,对象必须符合 AnyObject 协议(protocol)。您可以通过在协议(protocol)后缀“:class”来保证这一点,如下所示:

protocol SomeProtocol : class { ... }

关于arrays - 如何从 Swift 中的协议(protocol)数组中删除一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24974766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com