Передайте опубликованное свойство как привязку

у меня есть ObservableObjectс опубликованным словарем строк в массивы с массивами с Ints:

      class MyObservableObject: ObservableObject {
    @Published var myDict: [String: [[Int]]]
}

И я хочу передать один массив Ints как Binding из того же класса в функцию другой структуры:

      {
...
    func someFunc(key: String, index: Int) {
        someStruct.func(myDict[key]![index])
    }
...
}

Я это понимаю @Publishedvars нельзя передавать как Bindings. Я все еще надеюсь, что есть какой-то способ добиться этого. Я также пытался сохранить ссылку на массив в другой структуре, используя переменную inout, но тоже безуспешно.

1 ответ

@Published vars нельзя передавать как Bindings

Это неправда - можно через спроецированное значение через '$', но вы хотите передать не свойство, а часть значения свойства, а это другое дело.

Контекст не ясен, и это someFunc плохо пахнет :) - я бы сказал, что здесь нужен некоторый рефакторинг, но, в любом случае, технически можно делать то, что вы хотите, используя динамически сгенерированную привязку на месте, например

      func someFunc(key: String, index: Int) {
    guard myDict[key] != nil else { return }
    someStruct.func(Binding<[Int]>(
            get: { self.myDict[key]![index] },
            set: { self.myDict[key]![index] = $0 }
    ))
}
Другие вопросы по тегам