我是一个新的开发人员,已经在Swift & SwiftUI工作了几个月。
我有一个Picker
,特别是在MenuPickerStyle
中,用户可以在启动计时器之前进行选择。我想让计时器计入用户在选取器中选择的任何内容。如何获取从选择器中选择的值,并在代码的其他逻辑中使用它?
我试图保存selection
参数的值,但是我们都知道SwiftUI不喜欢在视图中包含逻辑。理想情况下,我希望从Picker
获得某种类型的输出,就像您可以从函数获得输出一样,这样我就可以在其他地方使用它。
发布于 2020-12-21 11:24:54
您的问题的根本解决方案是属性观察器。这是John写的一篇很棒的文章,可以帮助你入门。
https://www.swiftbysundell.com/articles/property-observers-in-swift/
基本上,当观察到的值发生变化时,您将使用属性观察器来执行一些逻辑。在您的示例中,您将在要将选取器绑定到的属性上使用属性观察器。
要做到这一点,另一种方法是在绑定类型上添加onChange()扩展,这样在SwiftUI中就不那么凌乱了,感觉更自在。下面是如何做到这一点的。
extension Binding {
func onChange(perform: @escaping (Value) -> Void) -> Binding<Value> {
Binding(get: {
// return wrapped value
self.wrappedValue
}, set: { newValue in
// set new value
self.wrappedValue = newValue
// call completion
perform(newValue)
})
}
func onChange(perform: @escaping () -> Void) -> Binding<Value> {
Binding(get: {
// return wrapped value
self.wrappedValue
}, set: { newValue in
// set new value
self.wrappedValue = newValue
// call completion
perform()
})
}
}
下面是如何在选择器中使用它。
Picker("Picker label", selection: $property.onChange(perform: someFunction)) {
// values
}
https://stackoverflow.com/questions/65386881
复制相似问题