数组 – 在Swift中修改字典数组
我是
Swift的新手,并且在解决Arrays和Dictionaries的某些方面时遇到了一些麻烦.
我有一系列字典,我使用了类型别名 – 例如 typealias myDicts = Dictionary<String,Double> var myArray : [myDicts] = [ ["id":0,"lat”:55.555555,"lng”:-55.555555,"distance":0],["id":1,"lat": 44.444444,"lng”:-44.444444,"distance":0] ] 然后我想迭代数组中的字典并更改“距离”键值.我是这样做的: for dict:myDicts in myArray { dict["distance"] = 5 } 或者甚至特别确保5是具有许多不同方法的双重,包括例如 for dict:myDicts in myArray { let numberFive : Double = 5 dict["distance"] = numberFive } 我的所有尝试都会导致错误: @lvalue $T5' is not identical to '(String,Double) 它似乎表现为里面的字典是不可变的“让”而不是“var”.所以我随机尝试了这个: for (var dict:myDicts) in myArray { dict["distance"] = 5 } 这样就消除了错误,并且在for循环中确实为key分配了5,但是从长远来看,这似乎并没有实际修改数组本身.我究竟做错了什么? 解决方法
你没有做错任何事.这就是Swift的工作方式.您有两种选择:
>使用NSMutableDictionary而不是Swift词典. 我正在谈论的“自定义类”仅仅是一个“价值类”,一组属性.这在Objective-C中是一种痛苦,但在Swift中它是微不足道的,所以我现在做了很多.问题是你可以在任何地方坚持自定义类的类定义;它不需要自己的文件,当然在Swift中你没有接口/实现foo来解决,更不用说内存管理和其他东西了.所以这只是几行代码,您可以使用您已经获得的代码. 这是我自己的代码中的一个例子: class Model { var task : NSURLSessionTask! var im : UIImage! var text : String! var picurl : String! } 然后,我们有一个模型阵列,然后我们走了. 所以,在你的例子中: class MyDict : NSObject { var id = 0.0 var lat = 0.0 var lng = 0.0 var distance = 0.0 } var myArray = [MyDict]() let d1 = MyDict() d1.id = 0 d1.lat = 55.55 d1.lng = -55.55 d1.distance = 0 let d2 = MyDict() d2.id = 0 d2.lat = 44.44 d2.lng = -44.44 d2.distance = 0 myArray = [d1,d2] // now we come to the actual heart of the matter for d in myArray { d.distance = 5 } println(myArray[0].distance) // it worked println(myArray[1].distance) // it worked (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |