Невозможно вызвать 'append' со списком аргументов типа '(String?!)'

Я пытаюсь добавить имена пользователей из Parse в массив для отображения их в UITableView, но получаю сообщение об ошибке при добавлении имен пользователей в мой массив.

Я получаю ошибку: не могу вызвать 'append' со списком аргументов типа '(String?!)'

Что я делаю неправильно?

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)
    }
}

2 ответа

Я решил свою проблему. Я объявляю массив как пустой массив и для развертывания необязательного с помощью следующего кода:

var usernames = [String]()

self.usernames.removeAll(keepCapacity: true)

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

PFUser.username является необязательным, и вы не можете добавить необязательный в String массив в Swift. Это потому, что необязательный может быть nil, а массив String в Swift принимает только строки.

Вам нужно либо принудительно развернуть необязательный, либо использовать синтаксис if-let, чтобы добавить его, если он существует.

Force Unwrap

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

Или если-давай

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

Кроме того, как упоминает Н.Р.Кирби в комментариях к вашему вопросу, вы можете посмотреть на инициализацию usernames массив по-разному. На данный момент первый элемент является пустой строкой.

Другие вопросы по тегам