ios – updateValue不适用于Dictionary
发布时间:2020-12-14 19:23:53 所属栏目:百科 来源:网络整理
导读:我在 Xcode中使用 Swift创建了一个测试应用程序,但我遇到了一个烦人的问题.我正在编写一个简单的类,它将使用Dictionary对象充当缓存.我的实现如下: import Foundationimport UIKitclass ImageCache { var dict:DictionaryString,NSData?; init() { dict = D
我在
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); } } 问题出在最后一种方法中,Xcode声明“无法找到成员’UpdateValue’”.这很奇怪,因为代码提示似乎表明它很好: 但是当我尝试编译时: 这可能是Xcode中的一个错误吗?或者我错过了一些非常明显的东西? 解决方法
这不是编译器中的错误或怪癖.
它是如何实施的(可能有缺陷) 发生的事情是,Optional将Dictionary作为不可变对象存储(或许也许).因此,即使是可选的,它也是可变的,您无法直接修改基础的Dictionaryobject(无需重新分配Optional对象). updateValue(forKey :)是一种变异方法,你不能在不可变对象上调用它,因此也就是错误. 你可以通过这样做来解决它 var d = dict! d.updateValue(data,forKey: id) 因为你将字典复制到另一个可变变量,该变量然后是可变的并且能够在其上调用变异方法 但是没有dict = d,你的更改将不会应用于dict,因为Dictionary是值类型,它会在每个赋值上进行复制 related answer (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |