updateValue不适用于Dictionary
我正在Xcode中使用Swift创build一个testing应用程序,我遇到了一个令人讨厌的问题。 我正在写一个简单的类,它将充当一个使用Dictionary对象的caching。 我的实现如下:
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); } }
这个问题是在最后一个方法,与Xcode陈述“无法find成员'UpdateValue'”。 这很奇怪,因为代码提示似乎显示它很好:
但是当我尝试编译时:
这可能是Xcode中的一个错误吗? 还是我错过了一些超级明显的东西?
这不是编译器中的一个bug或者一个怪癖。
这是如何Optional
实施(可能有瑕疵或不)
发生了什么事情是Optional
商店Dictionary
作为不可变的对象(也许let
)。 所以即使Optional
它是可变的,你不能直接修改底层的Dictionary
对象(不需要重新分配Optional对象)。
updateValue(forKey:)
是变异的方法,你不能在不可变的对象上调用它,并因此出错。
你可以通过这样做来解决这个问题
var d = dict! d.updateValue(data, forKey: id)
因为你将字典复制到另一个可变的variables,这个variables是可变的,并且能够调用它的变异方法
但没有dict = d
,你的改变将不会应用在dict
因为Dictionary
是值types,它会复制每个赋值
相关的答案
闻起来像编译器中的一个错误或怪癖。
我只是试过类似的东西
var d = dict! d.updateValue(data, forKey: id)
并按预期工作。