Неверное определение вашего класса TrackingCache
. Он повторяет общий параметр:
class TrackingCache<AftershipTracking>: BaseCache<AftershipTracking> { }
Это должно быть оставлено из:
class TrackingCache: BaseCache<AftershipTracking> { }
Это вызывает основную ошибку быструю Classes derived from generic classes must also be generic
. Вы можете обойти эту проблему, указав тип параметра, который требуется, чтобы быть или наследоваться от AftershipTracking:
class TrackingCache<T: AftershipTracking>: BaseCache<AftershipTracking> { }
Полный пример:
class BaseCache<T: Equatable>: NSObject {
var items: [T] = []
func appendItems(items: [T]) {
self.items += items
didAppendItems()
}
func didAppendItems() {} // for overriding
}
class AftershipTracking: NSObject {
var identifier: Int
init(identifier: Int) {
self.identifier = identifier
super.init()
}
}
extension AftershipTracking: Equatable { }
func ==(lhs: AftershipTracking, rhs: AftershipTracking) -> Bool {
return lhs.identifier == rhs.identifier
}
class TrackingCache<T: AftershipTracking>: BaseCache<AftershipTracking> {
override func didAppendItems() {
// do something
}
}
let a = TrackingCache<AftershipTracking>()
let b = TrackingCache<AftershipTracking>()
a.appendItems([AftershipTracking(identifier: 1)])
b.appendItems([AftershipTracking(identifier: 1)])
let result = a.items == b.items // true
Может быть проще просто добавить протокол в определение класса. 'Класс Aftership: Equatable {}' – rakeshbs
Это невозможно, потому что Aftership SDK написан на Objective C –
Может быть, добавьте == func внутри расширения, чтобы он фактически соответствовал протоколу. – ad121