传递已发布的 属性 作为绑定

Pass a published property as binding

我有一个 ObservableObject,其中包含已发布的字符串字典和带有整数数组的数组:

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

而且我想将一个 Ints 数组作为绑定从同一 class 内部传递给不同结构的函数:

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

我了解 @Published 变量不能作为绑定传递。我仍然希望有任何方法可以实现这一目标。我还尝试使用 inout 变量在另一个结构中存储对数组的引用,但也没有成功。

@Published vars can't be passed as Bindings

这不是真的 - 这是可能的,通过使用“$”的预测值,但您想要传递的不是 属性,而是 属性 的部分值,这是不同的东西。

上下文不明确,这 someFunc 味道 not-well :) - 我想说这里需要一些重构,但是,无论如何, 从技术上讲,可以使用动态 in-place 生成的绑定来做你想做的事,比如

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] = [=10=] }
    ))
}