Проблема с использованием 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)")
    }
}
Другие вопросы по тегам