cardView
- это константа let
, поскольку она создается циклом for
. Вы можете сделать его var
, добавив ключевое слово var
:
for (index, var cardView) in cardsContainerView.cardViews.enumerated() {
updateCardView(game.handedOutCards[index], &cardView)
}
Но это своего рода беспорядок, потому что вы все еще создаете новую переменную, которая является ссылкой на переменную в массиве, и затем передаете эту переменную. Это работает, потому что и переменная в массиве, и новая переменная являются ссылками на объект вашей карты, но вся вещь inout
является пустой тратой, потому что вы просто отбрасываете копию cardView
в следующей итерации цикла.
Вы можете изменить свой цикл на:
for index in cardsContainerView.cardViews.indices {
updateCardView(game.handedOutCards[index], &cardsContainerView.cardViews[index])
}
Здесь вы используете index
, чтобы найти и передать значение непосредственно из массива, поэтому элемент массива будет обновлен. Это даже сработало бы, если бы cardView
было struct
вместо class
.
Поскольку вы работаете с class
, вы можете обновлять объекты, не используя inout
.
Вы должны использовать self
для обновления объекта вместо inout
для передачи ссылки:
class CardView: UIButton {
func layerState() {
self.layer.cornerRadius = 3
self.layer.borderWidth = 2
}
}