簡體   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