繁体   English   中英

通用类型编译器的Swift扩展错误

[英]Swift Extension For Generic type compiler error

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

第一种方法工作正常,但setIntegerValue显示编译器错误:“在行: self.setObject(data,forKey:forKey,过期:过期)

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无关紧要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM