Jordy
Jordy

Reputation: 41

Cannot invoke 'append' with an argument list of type '(String?!)'

I'm trying to add usernames from Parse in an array to display them in a UITableView, but get an error when I'm appending the usernames to my array.

The error I get is: Cannot invoke 'append' with an argument list of type '(String?!)'

What am I doing wrong?

var usernames = [""]

func updateUsers() {      
    var query = PFUser.query()
    query!.whereKey("username", notEqualTo: PFUser.currentUser()!.username!)
    var fetchedUsers = query!.findObjects()

    for fetchedUser in fetchedUsers! {
        self.usernames.append(fetchedUser.username)
    }
}

Upvotes: 2

Views: 13214

Answers (2)

Jordy
Jordy

Reputation: 41

I solved my problem. I declare the array as an empty array and for unwrap the optional with the following code:

var usernames = [String]()

self.usernames.removeAll(keepCapacity: true)

    for fetchedUser in fetchedUsers! {
        if let username = fetchedUser.username as String! {
            self.usernames.append(username)
        }
    }

Upvotes: 2

rickerbh
rickerbh

Reputation: 9913

PFUser.username is an optional, and you can't append an optional into a String array in Swift. This is because the optional can be nil, and a String array in Swift only accepts strings.

You need to either force unwrap the optional, or use if-let syntax to add it if it exists.

Force Unwrap

self.usernames.append(fetchedUser.username! as String)

Or if-let

if let name = fetchedUser.username as? String {
  self.usernames.append(name)
}

Plus as NRKirby mentions in the comments on your question, you might want to look at initialising the usernames array differently. At the moment the first element is an empty string.

Upvotes: 0

Related Questions