Callback 向SwiftUI选择器添加回调
我正在尝试向SwiftUI选择器添加回调,但无法使其执行。当选择器值更改时,didSet显然不会执行。以下是我迄今为止所尝试的:Callback 向SwiftUI选择器添加回调,callback,picker,swiftui,Callback,Picker,Swiftui,我正在尝试向SwiftUI选择器添加回调,但无法使其执行。当选择器值更改时,didSet显然不会执行。以下是我迄今为止所尝试的: struct ContentView : View { @State private var picked: Int = 0 {didSet{print("here")}} var someData = ["a", "b", "c"] var body: some View { VStack { Pic
struct ContentView : View {
@State private var picked: Int = 0 {didSet{print("here")}}
var someData = ["a", "b", "c"]
var body: some View {
VStack {
Picker(selection: $picked,
label: Text("")) {
ForEach(0 ..< someData.count) {Text(self.someData[$0]).tag($0)}
}
.pickerStyle(.wheel)
Text("you picked: \(someData[picked])")
}
}
}
struct ContentView:View{
@选择的状态私有变量:Int=0{didSet{print(“此处”)}
var someData=[“a”、“b”、“c”]
var body:一些观点{
VStack{
选择器(选择:$picked,
标签:文本(“”){
ForEach(0..
您不能对带有@State
属性包装的变量使用didSet
修饰符
状态
包装器告诉SwiftUI,包装的值必须由SwiftUI框架本身管理。这意味着视图实际上并不包含该值,它只包含一个状态
(该状态是不可变的),它提供了对包装值的某种引用
实际上,您应该忘记SwiftUI视图中的didSet
回调。
视图
协议需要一个主体
,该主体未被标记为变异
(SwiftUI视图是结构
)。因此,视图基本上是不变的。代码更新为beta 6
@State变量永远不会执行didSet,因为它不会更改。改变的是包装的值。所以,我唯一能想到的方法就是把第二个绑定放在中间,作为中介,并传递价值。这样,你可以把你的回拨放在那里
struct ContentView:View{
@已拾取状态私有变量:Int=0
var someData=[“a”、“b”、“c”]
var body:一些观点{
设p=Binding(get:{
自选返回
},集:{
self.picked=$0
//你的回电在这里
打印(“设置值\($0)”)
})
返回VStack{
选择器(选择:p,
标签:文本(“”){
ForEach(0..
您可以使用ObserveObject来解决此问题
import SwiftUI
class PickerModel:ObservableObject{
@Published var picked: Int = 0 {didSet{print("here")}}
}
struct Picker_Callback: View {
@ObservedObject var pickerModal = PickerModel()
var someData = ["a", "b", "c"]
var body: some View {
VStack {
Picker(selection: self.$pickerModal.picked,
label: Text("")) {
ForEach(0 ..< someData.count) {Text(self.someData[$0]).tag($0)}
}
//.pickerStyle(.wheel)
Text("you picked: \(someData[self.pickerModal.picked])")
}
}
}
导入快捷键
类PickerModel:ObservableObject{
@已发布变量:Int=0{didSet{print(“此处”)}
}
结构选择器回调:视图{
@ObservedObject变量pickerModal=PickerModel()
var someData=[“a”、“b”、“c”]
var body:一些观点{
VStack{
选择器(选择:self.$pickerModal.picked,
标签:文本(“”){
ForEach(0..
rraphael是100%正确的。迪德集永远不会被调用。检查我的答案以找到解决方法。.onChange
修饰符(用于选择器等)可用,这在某些情况下可能已经足够了。Doesn未编译:函数声明不透明的返回类型,但在其主体中没有用于推断基础类型的返回语句。这只起了一半作用。我似乎可以让它工作回来。假设您希望转换通过绑定传入的字母“b”,并使其成为所选按钮。我来不了work@jimijon这是一个与SwiftUI无关的小问题:只需在数组中查找项索引:self.pick=self.someData.firstIndex(of:“b”)??0
它不是。设置绑定后,尝试将其传递给视图。如何设置绑定:@binding alphabetLetter:String?然后需要将self.picked设置为self.someData。首先。。。这就导致了无限的loopUau很好的解决方案,效果很好!我需要这个来更新来自父视图的绑定变量。