Проблема с использованием ScrollView с массивом
Я пытаюсь использовать массив для отображения некоторой информации об игре всякий раз, когда массив обновляется вызовом веб-службы. Массив заполняется нормально, но во время выполнения я получаю:
Универсальная структура ForEachWithIndex требует, чтобы Binding<[MatchData]>соответствовал параметру RandomAccessCollection.
Мой ScrollView:
ScrollView{
ForEach(GameCenterHelper.helper.$MatchList, id: \.self) {row in
ext("\(row.id)")
}
}
Мое объявление массива:
@State var MatchList: [MatchData] = [MatchData]()
И MatchData:
class MatchData : Identifiable {
var id: String
var LocalPlayer: Player
var RemotePlayer: Player
init(_ match: GKTurnBasedMatch) {
let local = match.participants[0].player!
let remote = match.participants[1].player ?? GKPlayer()
self.id = match.matchID
LocalPlayer = Player(Alias: local.alias
, DisplayName: local.displayName
, TeamPlayerId: local.teamPlayerID
, PlayerId: local.gamePlayerID
)
RemotePlayer = Player(Alias: remote.alias
, DisplayName: remote.displayName
, TeamPlayerId: remote.teamPlayerID
, PlayerId: remote.gamePlayerID
)
}
}
Я должен признать, что это первый раз, когда я использовал состояние, чтобы попытаться обновить ScrollView, но мне это оказалось намного сложнее, чем я ожидал, и я не уверен, что я ошибся в своем коде.
1 ответ
Решение
Вам не нужна привязка для итерации MatchList
в ForEach
, получить доступ к нему напрямую
ScrollView{
ForEach(GameCenterHelper.helper.MatchList, id: \.self) {row in // << no $
ext("\(row.id)")
}
}