struct Card {
var name0: String
var name1: String
}
var cards = [Card]()
// every time I want to mutate a struct property :(
cards[0].name0 = "good"
cards[0].name1 = "bye"
Вместо необходимости выполнять множественный доступ к индексу массива каждый раз, когда я хочу изменить свойство в структуре, существует ли метод, позволяющий избежать такой повторяющейся операции доступа к индексу массива?
Нет. Если у вас есть массив структуры, то для того, чтобы внести изменения в структуру внутри массива, вы должны обратиться к этой структуре по индексу.
Если вы не хотите видеть повторное использование индекса, вы можете скрыть его в функции, используя inout
:
func mutate(card: inout Card) {
card.name0 = "good"
card.name1 = "bye"
}
for index in cards.indices {
mutate(card:&cards[index])
}
Однажды Swift может включать for inout
, что позволит вам циклически проходить по массиву struct и мутировать каждый экземпляр структуры напрямую. Но этот день еще не здесь.
В ответ на подразумеваемый вопрос, стоит ли переходить на класс, чтобы избежать повторного использования индекса, мой ответ был бы Нет. Есть веская причина для использования структур - их гораздо проще рассуждать, чем классы, и это одна из лучших функций Swift - и я буду продолжать их использовать, если эта причина важна для вас.