Основная причина, по которой ваши имена не сортируются так, как вы ожидали, заключается в том, что при сортировке строк большие символы стоят на первом месте
B, a, c
, чтобы избежать такого поведения, вы можете использовать строчные буквы String
, используя lowercased()
В любом случае, нет двух отдельных массивов.Есть только одна из ваших пользовательских моделей.Итак, сначала создайте свою собственную модель, используя struct
struct Person {
var name, email: String
}
, а затем создайте массив людей
var people = [Person(name: "Alexander Jones", email: "alex@fiu.edu"),
Person(name: "Tony Stark", email: "Tony@Stark.com"),
Person(name: "cap", email: "cap@ca")]
Затем, сразу после нажатия кнопки, добавьте новый Person
и отсортируйте все элементы поих нижний регистр name
@IBAction func updateButtonPressed(_ sender: UIButton) {
people.append(Person(name: nameField.text!, email: emailField.text!))
people.sort { $0.name.lowercased() < $1.name.lowercased() }
}
Вы также можете добавить didSet
наблюдатель к вашему массиву, и тогда ваш массив будет сортироваться каждый раз, когда будет добавлен какой-то новый элемент или массив будет каким-либо образом изменен
var people = [Person(name: "Alexander Jones", email: "alex@fiu.edu"),
Person(name: "Tony Stark", email: "Tony@Stark.com"),
Person(name: "cap", email: "cap@ca")] {
didSet {
people.sort { $0.name.lowercased() < $1.name.lowercased() }
}
}
...
@IBAction func updateButtonPressed(_ sender: UIButton) {
people.append(Person(name: nameField.text!, email: emailField.text!))
}
И последнее, если вам нужно отсортировать массив перед первым нажатием кнопки, не забудьте отсортировать его, например, в viewDidLoad
контроллера