web-dev-qa-db-fra.com

Liaison d'un élément d'un tableau d'un ObservableObject: 'indice (_ :)' est déconseillé

J'utilise un ObservableObject 'DataStore', qui contient un tableau ('exampleList') d'objets ('exampleObject').

@Published exampleList = [exampleObject]()

J'appelle le DataStore via @EnvironmentObject ('dataStore').

@EnvironmentObject var dataStore = DataStore()

Ensuite, j'itère la liste avec

ForEach(0..<dataStore.exampleList.count) { index in ....

Pour lier l'élément de l'élément à une vue de détail, je fais comme ceci:

DetailView(itemBinding: $dataStore.exampleList[index])

Jusqu'à Xcode11 beta 4, cela fonctionnait parfaitement.

Depuis XCode11 beta 5, cela fonctionne toujours mais Xcode me donne cette alerte:

'subscript (_ :)' est déconseillé: voir les notes de publication pour un chemin de migration

J'ai essayé avec des choses plus simples, avec une simple variable @State contenant un tableau de chaînes, et c'est le même problème: lors de l'appel d'un élément de ce tableau, et en essayant d'utiliser la valeur dans un TextField:

TextField("test", text: $test[0])

Je reçois la même alerte.

Je ne comprends pas comment y remédier. Est-ce à dire que nous ne pouvons plus lier des valeurs à l'intérieur d'un tableau ?? Alors, comment pouvons-nous itérer un tableau et lier un élément spécifique?

Ceci est ma première question sur Stackoverflow, je m'excuse si ma question est maladroite ... Merci beaucoup pour vos réponses, j'utilise Stackoverflow depuis des années, c'est incroyable, je trouve toujours des réponses existantes et utiles, mais c'est la première fois Je n'en trouve pas, c'est pourquoi je demande.

13
hasselfred

J'ai dû lier le tableau d'un objet observable récemment, je n'ai reçu aucun avertissement sur XCode11 stable. Je l'ai fait comme ça

struct ScheduleTimer: Identifiable {
    var id: Int
    var name: String
    var start: Date
    var end: Date
    var isActive: Bool
}

struct ScheduleView: View {
    @ObservedObject var scheduleController = ScheduleController()
    var body: some View {
        NavigationView {
            Form {
                ForEach(scheduleController.timers) { timer in
                    ScheduleForm(scheduleController: self.scheduleController, timer: timer)
                }
            }
        }
    }
}


struct ScheduleForm: View {
    @ObservedObject var scheduleController: ScheduleController
    var timer: ScheduleTimer
    var scheduleIndex: Int {
        scheduleController.timers.firstIndex(where: { $0.id == timer.id })!
    }
    @State var start = Date()
    var body: some View {
        Section(header: Text(self.scheduleController.timers[scheduleIndex].name)){
            DatePicker("From", selection: self.$scheduleController.timers[scheduleIndex].start, displayedComponents: .hourAndMinute)
            DatePicker("To", selection: self.$scheduleController.timers[scheduleIndex].end, displayedComponents: .hourAndMinute)
            Toggle(isOn: self.$scheduleController.timers[scheduleIndex].isActive) {
                Text("")
            }.toggleStyle(DefaultToggleStyle())
        }
    }
}

class ScheduleController: ObservableObject {
    @Published var timers = [ScheduleTimer]()
...
0
Watermamal