Быстро обойти, чтобы `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:)

Другие вопросы по тегам