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.
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]()
...