SwiftUI 是苹果推出的声明式用户界面框架,用于构建iOS、macOS、watchOS和tvOS的应用程序。它允许开发者通过描述界面的外观和行为,而不是通过命令式代码来更新界面。
选取器(Picker) 是 SwiftUI 中的一个控件,用于在多个选项之间进行选择。
onChange 是 SwiftUI 中的一个修饰符,用于监听某个状态变量的变化,并在该变量变化时执行特定的操作。
didSet 是 Swift 语言中的一个属性观察器,当属性被设置新值时会调用。它通常用于在属性值变化时执行一些副作用操作。
Picker.onChange:
didSet:
import SwiftUI
struct ContentView: View {
@State private var selectedOption = "Option 1"
let options = ["Option 1", "Option 2", "Option 3"]
var body: some View {
VStack {
Picker("Select an option", selection: $selectedOption) {
ForEach(options, id: \.self) { option in
Text(option)
}
}
.pickerStyle(SegmentedPickerStyle())
.onChange(of: selectedOption) { newValue in
print("Selected option changed to: \(newValue)")
// 在这里执行其他操作,例如更新其他 UI 元素或执行网络请求
}
}
}
}
import SwiftUI
class ViewModel: ObservableObject {
@Published var selectedOption = "Option 1" {
didSet {
print("Selected option changed to: \(selectedOption)")
// 在这里执行其他操作,例如数据验证或触发其他业务逻辑
}
}
let options = ["Option 1", "Option 2", "Option 3"]
}
struct ContentView: View {
@StateObject private var viewModel = ViewModel()
var body: some View {
VStack {
Picker("Select an option", selection: $viewModel.selectedOption) {
ForEach(viewModel.options, id: \.self) { option in
Text(option)
}
}
.pickerStyle(SegmentedPickerStyle())
}
}
}
问题:在使用 Picker.onChange 或 didSet 时,可能会遇到选择变化后操作未执行的情况。
原因:
解决方法:
selection
绑定到一个正确的 @State
或 @Published
变量。id: \.self
)。通过以上方法,可以有效解决在使用 Picker.onChange 或 didSet 时遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云