相关疑难解决方法(0)

SwiftData 列表与 @Query 的绑定

从 Swift 5.5 开始,我们可以使用这样的绑定创建 SwiftUI 列表(例如,参见这个答案):

class Item {
    // ...
    var isOn: Bool
}

struct ContentView: View {
    @State private var items: [Item] = []
    var body: some View {
        NavigationView {
            List {
                ForEach($items) { $item in     // <--- list binding
                    Toggle(isOn: $item.isOn) {
                        Text("Vibrate on Ring")
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想用 SwiftData 做类似的事情,但出现错误:

struct ContentView: View {
    @Environment(\.modelContext) private var modelContext
    @Query private var items: [Item]
    var body: some View {
        NavigationView { …
Run Code Online (Sandbox Code Playgroud)

ios swift swift-data swiftui

14
推荐指数
2
解决办法
3929
查看次数

绑定ObservableObject数组的元素:不建议使用'subscript(_ :)'

我正在使用ObservableObject'DataStore',其中包含对象('exampleObject')的数组('exampleList')。

@Published exampleList = [exampleObject]()
Run Code Online (Sandbox Code Playgroud)

我通过@EnvironmentObject('dataStore')调用DataStore。

@EnvironmentObject var dataStore = DataStore()
Run Code Online (Sandbox Code Playgroud)

然后我用

ForEach(0..<dataStore.exampleList.count) { index in ....
Run Code Online (Sandbox Code Playgroud)

要将item的元素绑定到详细信息视图,我正在这样做:

DetailView(itemBinding: $dataStore.exampleList[index])
Run Code Online (Sandbox Code Playgroud)

在Xcode11 beta 4之前,它一直运行良好。

从XCode11 beta 5开始,它仍然可以工作,但是Xcode给我以下警告:

不推荐使用下标(_ :):有关迁移路径,请参见发行说明

我尝试了一些简单的东西,使用了一个简单的@State var包含一个字符串数组,这是同样的问题:调用此数组的元素并尝试将其值用于TextField时:

TextField("test", text: $test[0])
Run Code Online (Sandbox Code Playgroud)

我收到相同的警报。

我不知道该如何解决。这是否意味着我们不再可以在数组内部绑定值?然后,我们如何迭代数组并绑定特定项目?

这是我关于Stackoverflow的第一个问题,如果我的问题太笨拙,我深表歉意。非常感谢您的回答,多年来我一直在使用Stackoverflow,这很了不起,我总是能找到现有的有用的答案,但这是第一次我找不到任何东西,这就是为什么我要问。

swift swiftui xcode11

11
推荐指数
1
解决办法
1167
查看次数

如何在 SwiftUI 中更新单个子视图?

我正在尝试在子视图和父视图之间建立 SwiftUI 连接。通过单击任何子视图,我只想重绘已被点击的视图,而不是整个父视图。

下面的当前实现不允许您在单击时重绘视图,因为它具有派生值。

我通过将BindableObject协议添加到 尝试了不同的场景CustomColor,但没有成功。

class CustomColor: Identifiable {

    let id = UUID()
    var color: Color

    init(color: Color) {
        self.color = color
    }

    func change(to color: Color) {
        self.color = color
    }

}

class ColorStore: BindableObject {

    var colors: [CustomColor] = [] {
        didSet {
            didChange.send(self)
        }
    }

    var didChange = PassthroughSubject<ColorStore, Never>()

    init() {
        self.colors = Array.init(repeating: CustomColor(color: .red), count: 10)
    }

}


struct ContentView: View {

    @EnvironmentObject var colorStore: ColorStore

    var body: some …
Run Code Online (Sandbox Code Playgroud)

swiftui

6
推荐指数
1
解决办法
9956
查看次数

标签 统计

swiftui ×3

swift ×2

ios ×1

swift-data ×1

xcode11 ×1