updateValue不适用于Dictionary

Wil*_*mas 5 xcode dictionary ios swift

我在Xcode中使用Swift创建了一个测试应用程序,但我遇到了一个烦人的问题.我正在编写一个简单的类,它将使用Dictionary对象充当缓存.我的实现如下:

import Foundation
import UIKit

class ImageCache {
    var dict:Dictionary<String,NSData>?;

    init() {
        dict = Dictionary<String,NSData>();
    }

    func exists(id:String) -> Bool {
        return dict!.indexForKey(id)!==nil;
    }

    func getImage(id:String) -> UIImage? {
        if(!exists(id)) {
            return nil;
        }
        return UIImage(data: (dict!)[id]);
    }

    func setData(id:String, data:NSData) {
        dict!.updateValue(data, forKey: id);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题出在最后一种方法中,Xcode声明"无法找到成员'UpdateValue'".这很奇怪,因为代码提示似乎表明它很好:

代码提示

但是当我尝试编译时:

编译错误

这可能是Xcode中的一个错误吗?或者我错过了一些非常明显的东西?

Bry*_*hen 3

这不是编译器中的错误或怪癖。

这是如何Optional实施的(可能有缺陷或没有)

发生的事情是存储OptionalDictionary不可变对象(let也许)。因此,即使Optional它是可变的,您也不能Dictionary直接修改底层对象(无需重新分配可选对象)。

updateValue(forKey:)是变异方法,您不能在不可变对象上调用它,因此会出现错误。

你可以通过这样做来解决它

var d = dict!
d.updateValue(data, forKey: id)
Run Code Online (Sandbox Code Playgroud)

因为您将字典复制到另一个可变变量,该变量是可变的并且能够对其调用变异方法

但如果没有dict = d,您的更改将不会被应用,dict因为Dictionary它是值类型,它会在每个分配上进行复制

相关答案