Проблема с ObservableObject

#ios #swift #swiftui

#iOS #swift #swiftui

Вопрос:

У меня есть класс, который настроен как ObservableObject:

 class MatchData : Identifiable,  ObservableObject {
    
    @Published var id: Int
    
    @Published var LocalPlayer: Player
    @Published var RemotePlayer: Player
    
    init(_ match: GKTurnBasedMatch, id: Int) {
        
        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.&amePlayerID
        )
        
        RemotePlayer = Player(Alias: remote.alias
            , DisplayName: remote.displayName
            , TeamPlayerId: remote.teamPlayerID
            , PlayerId: remote.&amePlayerID
            
        )
        self.id  = id
    }
}
  

а затем в другом классе у меня есть:

 @ObservedObject var MatchList: [MatchData] = [MatchData]()
  

Однако это приводит к ошибке:

Общая структура ‘ObservedObject’ требует, чтобы ‘[MatchData]’ соответствовала ‘ObservableObject’

Я полагал, что мой класс соответствует ObservableObject, однако, похоже, я не могу избавиться от этой ошибки.

Комментарии:

1. Вы не можете использовать array, [MatchData], как свойство observed object, поскольку оно не является наблюдаемым. Можно наблюдать только observable, например @ObservedObject var matchData: MatchData

Ответ №1:

Вы можете создать явный наблюдаемый класс для сбора MatchData , например

 class MatchList: ObservableObject {
   @Published var data: [MatchData] = [MatchData]()
}
  

и тогда вы сможете использовать в представлении

 @ObservedObject var matchList: MatchList
  

Комментарии:

1. Спасибо, я попробовал ` class MatchList : ObservableObject { @Published var data: [MatchData] = [MatchData]() } @ObservedObject var MatchList: MatchList`, Но это по-прежнему выдает ту же ошибку ** Редактировать — игнорируйте меня, мне нужно было удалить объявление ObservableObject в классе MatchData

2. Это не может быть та же ошибка, если код изменен… посмотрите все места — что-то забыто.