我有以下情况:(只需将其复制到操场上)
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 的重载 ...”
好吧,我知道问题是 addUID 中 aObj 的类型,编译器不清楚。
途中会说
func addUID(aObj: T) {
cache.setObject(aObj as A, forKey:aObj.uid)
}
但在这种情况下,a 可以完全跳过通用主题。我尝试将 aObj 向下转换为 AnyObject 或 NSObject 之类的东西,但它不起作用。
有任何想法吗?
我会很高兴有一个通用版本的缓存:)
更新:
解决方案是在协议上添加@objc 属性,因此该协议仅可用于类,但这导致协议的一般限制。我只是喜欢类 manageUID 中的本地解决方案。