[AnyObject]? doesn't have a member named 'Generator'

func retrieveMessages() {

    var query:PFQuery = PFQuery(className: "Message")

    //Call findobjectsinbackground

    query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in

        self.messagesArray = [String]()
        for messageObject in objects {   <<<<<<<<<<<<<<<<< error
            let messageText:String? = (messageObject as PFObject)["Text"] as? String
            if messageText != nil {
                self.messagesArray.append(messageText!)
            }
        }
        self.messageTableView.reloadData()
    }
}

Error occurs because the code: [AnyObject]? does not have a member named 'Generator'. Is there any way to fix this?

+4
source share
4 answers

Your array is objectsdeclared as optional:objects:[AnyObject]?

So you need to expand it before iterating over it:

for messageObject in objects! {
    // do stuff
}

And since it objectscan be null, better do the following:

if let myObjects = objects {
    for messageObject in myObjects {
        // do stuff
    }
}
+11
source

This is because it is an additional array. Just wrap it around if letand everything will be alright.

In the playground:

func retrieveMessages(objects:[AnyObject]?) {
    var messagesArray = [String]()

    if let objs = objects {
        for messageObject in objs {
            let messageText:String? = "test"
            if messageText != nil {
                messagesArray.append(messageText!)
            }
        }
    }
}

In your case, the full code is:

func retrieveMessages() {
    var query:PFQuery = PFQuery(className: "Message")

    query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in

        self.messagesArray = [String]()

        if let objs = objects {
            for messageObject in objs {
                let messageText:String? = (messageObject as PFObject)["Text"] as? String
                if messageText != nil {
                    self.messagesArray.append(messageText!)
                }
            }
        }

        self.messageTableView.reloadData() 
    } 
}
+2
source

Array [AnyObject]?, .

if let myObjects = objects as? [PFObject] {
   //Do the things...
}
+1
source

[AnyObject]? This is an optional array.

You must deploy it before using it.

if let objects = objects
{
  for messageObject in objects 
  {
   ....
  }
}
0
source

Source: https://habr.com/ru/post/1585094/


All Articles