相关疑难解决方法(0)

在 ForEach 中删除数组元素时 SwiftUI 超出索引

我在这里查看了不同的问题,但不幸的是我找不到答案。这是我的代码:

SceneDelegate.swift

...
let contentView = ContentView(elementHolder: ElementHolder(elements: ["abc", "cde", "efg"]))
...
window.rootViewController = UIHostingController(rootView: contentView)
Run Code Online (Sandbox Code Playgroud)

内容视图.swift

class ElementHolder: ObservableObject {

    @Published var elements: [String]

    init(elements: [String]) {
        self.elements = elements
    }
}

struct ContentView: View {

    @ObservedObject var elementHolder: ElementHolder

    var body: some View {
        VStack {

            ForEach(self.elementHolder.elements.indices, id: \.self) { index in
                SecondView(elementHolder: self.elementHolder, index: index)
            }

        }
    }
}

struct SecondView: View {

    @ObservedObject var elementHolder: ElementHolder
    var index: Int

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

swift swiftui

9
推荐指数
2
解决办法
5347
查看次数

SwiftUI 上带有 TextField 的可删除表格

环境

  • Xcode 11.2.1 (11B500)

问题

为了在 SwiftUI 上使用 TextField 实现可编辑的 teble,我曾经ForEach(0..<items.count)处理过index.html 。

import SwiftUI

struct DummyView: View {
    @State var animals: [String] = ["", ""]

    var body: some View {
        List {
            EditButton()
            ForEach(0..<animals.count) { i in
                TextField("", text: self.$animals[i])
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果将表更改为可删除,则会出现问题。

import SwiftUI

struct DummyView: View {
    @State var animals: [String] = ["", ""]

    var body: some View {
        List {
            EditButton()
            ForEach(0..<animals.count) { i in
                TextField("", text: self.$animals[i]) // Thread 1: Fatal error: …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

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

标签 统计

swift ×2

swiftui ×2