ios – Swift无法通过下标分配:下标仅获取

前端之家收集整理的这篇文章主要介绍了ios – Swift无法通过下标分配:下标仅获取前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对 Swift语法相当新,并且我的代码“无法通过下标分配:下标仅获取”,我收到此错误

这是从行:friendDictionary [(friendUID as?String)!] = [“name”:friendsData![“name”]]

任何关于正确方法的建议都会非常有帮助.

  1. func getFriendsUIDs() {
  2.  
  3. if FBSDKAccessToken.currentAccessToken() == nil {
  4.  
  5. print("Failed to start graph request")
  6. return
  7.  
  8. }else{
  9. }
  10.  
  11.  
  12. if FBSDKAccessToken.currentAccessToken() != nil {
  13. }
  14.  
  15. let parameters = ["fields": "name,id,picture"]
  16. FBSDKGraphRequest(graPHPath: "/me/friends",parameters: parameters).startWithCompletionHandler {
  17. (NSURLConnection,result,requestError) in
  18. let friendIds = result["id"] as? NSDictionary
  19. let friendsData = friendIds!["data"] as? [NSDictionary]
  20.  
  21. var ref: FIRDatabaseReference!
  22. ref = FIRDatabase.database().reference()
  23. ref.child("users").child((FIRAuth.auth()?.currentUser?.uid)!).child("friendUIDs").observeEventType(.Value,withBlock: { (snapshot) in
  24. self.FriendUIDs = NSArray()
  25. self.FriendUIDs = (snapshot.value as? NSArray)!
  26. print(self.FriendUIDs)
  27. var friendDictionary = NSDictionary()
  28. for friendUID in self.FriendUIDs {
  29. friendDictionary[(friendUID as? String)!] = ["name": friendsData!["name"]]
  30. }
  31.  
  32. self.fetchFriendFeed(friendDictionary)
  33. }) { (error) in
  34. print(error.localizedDescription)
  35. }
  36. }
  37.  
  38. }
  39.  
  40.  
  41.  
  42. func fetchFriendFeed(friendDictionary: NSDictionary) {
  43.  
  44.  
  45. var ref: FIRDatabaseReference!
  46. ref = FIRDatabase.database().reference()
  47.  
  48. for friendUID in FriendUIDs {
  49.  
  50. ref.child("users").child(friendUID as! String).child("Agenda").observeEventType(.ChildAdded,withBlock: { (snapshot) in
  51.  
  52. print(snapshot)
  53. if let dictionary = snapshot.value as? [String: AnyObject] {
  54. let friendPost = FriendPost()
  55. friendPost.picture = friendDictionary[friendUID as! String]? ["picture"] as? String
  56. friendPost.activity = dictionary["activity"] as? String
  57. friendPost.date = dictionary["date"] as? String
  58. friendPost.time = dictionary["time"] as? String
  59. friendPost.friendname = friendDictionary[friendUID as! String]? ["name"] as? String
  60. self.friendPosts.append(friendPost)
  61.  
  62. dispatch_async(dispatch_get_main_queue(),{
  63. self.collectionView?.reloadData()

解决方法

与Swift无关.您已经选择使用Objective-C,实际上是将friendDictionary设为NSDictionary. NSDictionary是不可变的;你不能分配或以任何方式改变它.这只是关于Objective-C的一个事实. Swift var声明对这个事实没有任何影响.

一个更好的选择,因为你在Swift中编写,将使用Swift字典,它是[AnyHashable:Any]()(在Swift 3中).当你与Objective-C交谈时,这将与NSDictionary交换,但它会给你一个可变字典,因为你(正确地)用var声明了它.

猜你在找的iOS相关文章