ios – updateValue不适用于Dictionary

ios – updateValue不适用于Dictionary,第1张

概述我在 Xcode中使用 Swift创建了一个测试应用程序,但我遇到了一个烦人的问题.我正在编写一个简单的类,它将使用Dictionary对象充当缓存.我的实现如下: import Foundationimport UIKitclass ImageCache { var dict:Dictionary<String,NSData>?; init() { dic 我在 Xcode中使用 Swift创建了一个测试应用程序,但我遇到了一个烦人的问题.我正在编写一个简单的类,它将使用Dictionary对象充当缓存.我的实现如下:

import Foundationimport UIKitclass 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

总结

以上是内存溢出为你收集整理的ios – updateValue不适用于Dictionary全部内容,希望文章能够帮你解决ios – updateValue不适用于Dictionary所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1050509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存