【发布时间】:2016-10-07 11:16:18
【问题描述】:
我已经为 NSData 泛型类型 (https://github.com/aschuch/AwesomeCache) 创建了 Cache 类的扩展
第一种方法工作正常,但 setIntegerValue 显示编译器错误: “无法使用类型为 '(NSData, forKey: String, expires: CacheExpiry)' 的参数列表调用 'setObject'”在行:self.setObject(data, forKey: forKey, expires: expires)
extension Cache where T: NSData {
func integerForKey(key: String) -> Int? {
if let data = self.objectForKey(key), string = String(data: data, encoding: NSUTF8StringEncoding), intValue = Int(string) {
return intValue
}
return nil
}
func setIntegerValue(integerValue: Int, forKey: String, expires: CacheExpiry = .Never) {
let stringValue = String(integerValue)
if let data = stringValue.dataUsingEncoding(NSUTF8StringEncoding) {
self.setObject(data, forKey: forKey, expires: expires)
}
}
}
我创建了没有扩展的测试,效果很好:
let cache = try! Cache<NSData>(name: "MyCache")
let string = "foo"
if let data = string.dataUsingEncoding(NSUTF8StringEncoding) {
cache.setObject(data, forKey: "bar")
}
所以,我不明白发生了什么?谁能告诉我 - 出了什么问题?
【问题讨论】:
-
extension Cache where T: NSData— 我认为 Swift 只允许在extension/where类型约束中使用协议。它甚至不适用于NSData。