gpt4 book ai didi

ios - SwiftUI:选择器中的 ForEach 不更新

转载 作者:行者123 更新时间:2023-11-29 11:25:58 24 4
gpt4 key购买 nike

我有一个元素数组,我想使用 Picker 从中选择一个元素,我有一个 Button,它只是向数组添加一个新元素。问题是,当我添加一个元素时,Picker 选项不会更新。它不适用于 DefaultPickerStyle,但适用于 SegmentedPickerStyle

代码:

import SwiftUI

struct ExampleView: View {
@State
var array : Array<Int> = [Int]()
@State
var selection : Int = 0

var body: some View {
VStack {
Picker("", selection: self.$selection) {
ForEach(self.array, id : \.self) { i in
Text(String(i))
}
}
// uncomment, and picker will refresh upon pushing the button
//.pickerStyle(SegmentedPickerStyle())

Button(action: {
self.array.append(self.array.count)
}){
Text("Add me: " + String(self.array.count))
}
}
}
}

struct ExampleView_Previews: PreviewProvider {
static var previews: some View {
ExampleView()
}
}

有什么办法可以解决这个问题吗?我真的需要更新 Picker(以其默认样式)。 Xcode 版本 11.2.1 (11B500)。

最佳答案

正如@e-coms 所指出的,有一个 similar question . @p-ent 找到的可接受的解决方法( github ) 是在每次按下按钮时为 Picker 重新分配一个唯一的 .id(...),以强制其更新。适应我的问题:

UPD:更好,感谢@e-coms

import SwiftUI

struct ExampleView: View {
@State
var array : Array<Int> = [0,1,2]
@State
var selection : Int = 0

var body: some View {
VStack {
Picker("", selection: self.$selection) {
ForEach(self.array, id : \.self) { i in
Text(String(i))
}
}
.id(self.array)

Button(action: {
self.array.append(self.array.count)
}){
Text("Add me: " + String(self.array.count))
}
}
}
}

struct ExampleView_Previews: PreviewProvider {
static var previews: some View {
ExampleView()
}
}

关于ios - SwiftUI:选择器中的 ForEach 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com