Быстро обойти, чтобы `AnyObject.Type` соответствовал`Equatable`?
Я хотел бы сделать AnyClass
(AKA AnyObject.Type
) соответствовать Equatable
так что когда у меня есть массив с AnyClass
элементы (Array<AnyClass>
), Я могу позвонить remove(Element:)
, но это требует Element
соответствовать Equatable
,
2 ответа
С Swift 3 вы можете использовать AnyHashable
в качестве замены AnyObject
, Он представляет собой любое значение, которое соответствует Equatable
протокол.
Вместо
var array:[AnyObject] = []
просто пиши
var array:[AnyHashable] = []
Я на самом деле не думаю, что вы пытаетесь достичь, или вы должны даже попытаться сделать это таким образом.
Классы, как правило, представляют объекты реального мира, будь то автомобиль, вид или что-то совершенно другое. Поэтому очень сложно сказать, ЛЮБОЙ ли я класс, который я создаю, такой же, как этот другой класс, который я создал.
Свифт просто не знает, как их сравнивать, что делает их одинаковыми.
Простейший способ добиться того, чего вы здесь хотите, - это определить собственный протокол / интерфейс, который представляет общую версию классов, которые вы будете использовать в этом приложении, а затем убедиться, что каждый соответствует этому и также приравнивается. Тогда вы должны быть в состоянии сделать что-то вроде:
var objs = Array<MyAppClassesProtocol>()
а также использовать remove(element:)