У меня следующая ситуация: (просто скопируйте на площадку)
import Cocoa
protocol UID {
var uid: Int {get set}
}
class A : UID {
var uid = 01
}
class manageUID<T: UID> {
let cache = NSCache()
func addUID(aObj: T) {
cache.setObject(aObj, forKey:aObj.uid)
}
func deletedUID(aObj: T) {
cache.removeObjectForKey(aObj.uid)
}
}
Это приводило к ошибке "Не удалось найти перегрузку для setObject..."
Ну я знаю, что проблема в типе aObj в addUID, компилятору это непонятно.
На пути было бы сказать
func addUID(aObj: T) {
cache.setObject(aObj as A, forKey:aObj.uid)
}
Но в этом случае можно вообще пропустить общую тему. Я пытаюсь преобразовать aObj во что-то вроде AnyObject или NSObject, но это не сработало.
Любые идеи?
Было бы неплохо иметь общую версию кеша :)
ОБНОВИТЬ:
Решение состоит в том, чтобы добавить атрибут @objc в протокол, поэтому протокол можно использовать только для классов, но это приводит к общему ограничению для протокола. Мне просто нравится локальное решение в классе manageUID.