微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI-如何创建和使用自定义类型的数组

如何解决SwiftUI-如何创建和使用自定义类型的数组

我正在尝试创建一个包含我的struct Element的数组。尝试使用.append时出现两个错误

“不能在不可变值上使用变异成员:'自身'是不可变的”和“不能将类型为“元素”的值转换为预期的参数类型为“ [元素]””

我显然做错了所有事情。

我的测试代码

var elements = [[Element]]()

var body: some View {
    
    vstack {
        ForEach (0..<26) { index in
            Text("\(index) Hello,World!")
            
            elements.append(Element(direction: "Direction \(index)",movement: "Movement \(index)",multiplier: index))
        }
    }
  }
 }
  struct Element {
    var direction: String
    var movement: String
    var multiplier: Int
  }

解决方法

您无法在ForEach内部执行任何操作。 ForEach期望从中返回单个View。但是,如果要在ForEach内附加数据,则可以在ForEach内的View上调用onAppear()闭包时执行此操作。

这是将elements数组添加到View的onAppear中后的代码。

VStack {
        ForEach (0..<26) { index in
            Text("\(index) Hello,World!").onAppear() {
            
                elements.append(Element(direction: "Direction \(index)",movement: "Movement \(index)",multiplier: index))
            }
        }
    }

您将得到“不可变的错误”,因为您可能声明了该结构内的 elements 变量,并且该结构内的属性是不可变的。因此,要附加新值,您要么需要使用 @State 注释 elements 变量,要么可以在结构外部声明它

在结构声明之外:

var elements: [Element] = []
struct MyView: View {
    
}

带有注释,但在结构声明中:

struct MyView: View {
    @State var elements: [Element] = []
}

您还需要知道,更改@State注释属性的值会更新UI,但这不必担心,因为SwiftUI计算UI中的更改并仅更新新更改

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。