首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SwiftUI中使用选取器之外的选取器选择值

在SwiftUI中使用选取器之外的选取器选择值
EN

Stack Overflow用户
提问于 2020-12-21 10:32:05
回答 1查看 96关注 0票数 2

我是一个新的开发人员,已经在Swift & SwiftUI工作了几个月。

我有一个Picker,特别是在MenuPickerStyle中,用户可以在启动计时器之前进行选择。我想让计时器计入用户在选取器中选择的任何内容。如何获取从选择器中选择的值,并在代码的其他逻辑中使用它?

我试图保存selection参数的值,但是我们都知道SwiftUI不喜欢在视图中包含逻辑。理想情况下,我希望从Picker获得某种类型的输出,就像您可以从函数获得输出一样,这样我就可以在其他地方使用它。

EN

回答 1

Stack Overflow用户

发布于 2020-12-21 11:24:54

您的问题的根本解决方案是属性观察器。这是John写的一篇很棒的文章,可以帮助你入门。

https://www.swiftbysundell.com/articles/property-observers-in-swift/

基本上,当观察到的值发生变化时,您将使用属性观察器来执行一些逻辑。在您的示例中,您将在要将选取器绑定到的属性上使用属性观察器。

要做到这一点,另一种方法是在绑定类型上添加onChange()扩展,这样在SwiftUI中就不那么凌乱了,感觉更自在。下面是如何做到这一点的。

代码语言:javascript
运行
复制
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()
        })
    }
}

下面是如何在选择器中使用它。

代码语言:javascript
运行
复制
Picker("Picker label", selection: $property.onChange(perform: someFunction)) {
    // values
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65386881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档