Почему каждый элемент массива пользовательского класса данных в iOS отображается с одинаковыми данными, даже если добавлены разные данные? [Дубликат]

Это потому, что метод Scanner.nextInt не использует последний символ новой строки вашего ввода, и, таким образом, эта строка используется в следующем вызове Scanner.nextLine.

Вы столкнетесь с аналогичным поведением, когда вы используете Scanner.nextLine после Scanner.nextInt или любого метода Scanner.nextFoo (кроме самого nextLine).

Обход проблемы:

Scanner.nextLine вызывать после Scanner.nextInt или Scanner.nextFoo, чтобы потреблять остальную часть этой строки, включая новую строку int option = input.nextInt(); input.nextLine(); // Consume newline left-over String str1 = input.nextLine(); . Или было бы еще лучше, если вы прочитаете ввод через Scanner.nextLine и преобразуете свой ввод в нужный формат , Например, для целого числа с использованием метода Integer.parseInt(String). int option = 0; try { option = Integer.parseInt(input.nextLine()); } catch (NumberFormatException e) { e.printStackTrace(); } String str1 = input.nextLine();

1
задан Icaro 8 June 2015 в 04:34
поделиться

1 ответ

Вы передаете данные в массив по ссылке, и в каждом цикле вы меняете значение ссылки:

self.aUser.username = object["username"] as! String
self.usersAvailableArray.append(self.aUser)

Попробуйте каждый раз создавать нового пользователя:

var newUser = usersAvailable()
newUser.username = object["username"] as! String
self.usersAvailableArray.append(newUser)

Это происходит потому, что объект, который вы добавляете, приходит из класса из документации к присяге :

Классы являются ссылочными типами

В отличие от типов значений ссылочные типы не копируются, когда они назначаются переменной или константе или когда они передаются функции. Вместо копии вместо этого используется ссылка на один и тот же существующий экземпляр. Вы можете увидеть больше о значениях и ссылках в Swift

. Еще одно решение - изменить ваш класс на структуру, как показано ниже, structs different, если классы делают копию значения, когда оно передается вместо передать ссылку.

struct usersAvailable {
    var username = String()
    var userAvatar = UIImage()
}
1
ответ дан Icaro 3 September 2018 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: