首页 > 解决方案 > SwiftUI onChange 修饰符如何工作?

问题描述

我动态填充了一个 SwiftUI 选择器。Picker 工作正常。我想触发或监听选择器更改事件。假设如果用户选择一个项目,我将打印该值。我的 iOS 部署目标是 14,我发现 iOS 有一个内置函数onChange来检测这种监听器。我使用了那个修饰符但没有工作。这是我的代码:

var body: some View {
    
    
    
    Picker( selection: $selectedStrength, label: Text("Status")) {
        
        ForEach(courseList, id: \.self) { item in
            
            Text(item.courseCode ?? "")
        }
    }
    .onChange(of:selectedStrength, perform: { _ in
        
        print("Value Changed!")
        
    })
    .pickerStyle(WheelPickerStyle())
    
}

标签: iosswiftswiftuipicker

解决方案


我认为这是由于类型不匹配,Picker 选择类型和项目类型或(!)标签应该相同。一旦您按项目迭代但显示courseCode这可能是错误的原因。

尝试类似(未测试,因为提供的代码不是独立的且不可运行)

Picker(selection: $selectedStrength, label: Text("Status")) {
    
    ForEach(courseList, id: \.self) { item in
        
       // assiming selectedStrength type and item.courseCode type is the same
        Text(item.courseCode ?? "").tag(item.courseCode)
    }
}
.onChange(of: selectedStrength, perform: { _ in
    
    print("Value Changed!")
    
})

推荐阅读