数组 – 在Swift中修改字典数组

前端之家收集整理的这篇文章主要介绍了数组 – 在Swift中修改字典数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 Swift的新手,并且在解决Arrays和Dictionaries的某些方面时遇到了一些麻烦.

@H_404_8@

我有一系列字典,我使用了类型别名 – 例如@H_404_8@

@H_404_8@

  1. typealias myDicts = Dictionary<String,Double>
  2.  
  3. var myArray : [myDicts] = [
  4. ["id":0,"lat”:55.555555,"lng”:-55.555555,"distance":0],["id":1,"lat": 44.444444,"lng”:-44.444444,"distance":0]
  5. ]

然后我想迭代数组中的字典并更改“距离”键值.我是这样做的:@H_404_8@

@H_404_8@

  1. for dict:myDicts in myArray {
  2.  
  3. dict["distance"] = 5
  4.  
  5. }

或者甚至特别确保5是具有许多不同方法的双重,包括例如@H_404_8@

@H_404_8@

  1. for dict:myDicts in myArray {
  2.  
  3. let numberFive : Double = 5
  4.  
  5. dict["distance"] = numberFive
  6.  
  7. }

我的所有尝试都会导致错误:@H_404_8@

@H_404_8@

  1. @lvalue $T5' is not identical to '(String,Double)

它似乎表现为里面的字典是不可变的“让”而不是“var”.所以我随机尝试了这个:@H_404_8@

@H_404_8@

  1. for (var dict:myDicts) in myArray {
  2.  
  3. dict["distance"] = 5
  4.  
  5. }

这样就消除了错误,并且在for循环中确实为key分配了5,但是从长远来看,这似乎并没有实际修改数组本身.我究竟做错了什么?@H_404_8@

解决方法

你没有做错任何事.这就是Swift的工作方式.您有两种选择:

@H_404_8@

>使用NSMutableDictionary而不是Swift词典.
>使用自定义类而不是字典.在某种程度上,这是一个更好的解决方案,因为在所有词典具有相同结构的情况下,它应该一直在做.@H_404_8@

我正在谈论的“自定义类”仅仅是一个“价值类”,一组属性.这在Objective-C中是一种痛苦,但在Swift中它是微不足道的,所以我现在做了很多.问题是你可以在任何地方坚持自定义类的类定义;它不需要自己的文件,当然在Swift中你没有接口/实现foo来解决,更不用说内存管理和其他东西了.所以这只是几行代码,您可以使用您已经获得的代码.@H_404_8@

这是我自己的代码中的一个例子:@H_404_8@

@H_404_8@

  1. class Model {
  2. var task : NSURLSessionTask!
  3. var im : UIImage!
  4. var text : String!
  5. var picurl : String!
  6. }

然后,我们有一个模型阵列,然后我们走了.@H_404_8@

所以,在你的例子中:@H_404_8@

@H_404_8@

  1. class MyDict : NSObject {
  2. var id = 0.0
  3. var lat = 0.0
  4. var lng = 0.0
  5. var distance = 0.0
  6. }
  7.  
  8. var myArray = [MyDict]()
  9.  
  10. let d1 = MyDict()
  11. d1.id = 0
  12. d1.lat = 55.55
  13. d1.lng = -55.55
  14. d1.distance = 0
  15. let d2 = MyDict()
  16. d2.id = 0
  17. d2.lat = 44.44
  18. d2.lng = -44.44
  19. d2.distance = 0
  20. myArray = [d1,d2]
  21.  
  22. // now we come to the actual heart of the matter
  23.  
  24. for d in myArray {
  25. d.distance = 5
  26. }
  27. println(myArray[0].distance) // it worked
  28. println(myArray[1].distance) // it worked

猜你在找的Swift相关文章