我已经为NSData泛型类型(https://github.com/aschuch/AwesomeCache)创建了Cache类的扩展

第一种方法工作正常,但是setIntegerValue显示编译器错误:
在行:self.setObject(data,forKey:forKey,过期:过期)“无法调用类型为'(NSData,forKey:String,expires:CacheExpiry)'的参数列表的'setObject'”

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")
}


所以,我不知道发生了什么事?谁能告诉我-怎么了?

最佳答案

问题在于data是NSData,但是setObject将T作为其第一个参数。不是NSData。

的确,您已经为T:NSData定义了此扩展名,但这与Swift无关。

关于ios - 通用类型编译器的Swift扩展错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39915900/

10-12 00:34
查看更多