gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:00:53 27 4
gpt4 key购买 nike

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

第一种方法工作正常,但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")
}

所以我不明白发生了什么?有人能告诉我 - 出了什么问题吗?

最佳答案

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

确实,您已经为 T:NSData 定义了此扩展,但这对 Swift 来说并不重要。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com