首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SwiftUI如何使用回调添加自定义修饰符

SwiftUI如何使用回调添加自定义修饰符
EN

Stack Overflow用户
提问于 2019-11-09 14:22:03
回答 1查看 6.7K关注 0票数 7

在SwiftUI中,您可以编写如下代码:

代码语言:javascript
运行
复制
List {
    ForEach(users, id: \.self) { user in
        Text(user)
    }
    .onDelete(perform: delete)
}

我尝试使用.onDelete语法方法向我的自定义组件添加功能:

代码语言:javascript
运行
复制
struct MyComponen: View {
    @Binding var alert: String

    .
    .
    .
}

我试图通过扩展添加此功能:

代码语言:javascript
运行
复制
extension MyComponent {

   func foo() -> Self { 
        var copy = self
        copy.alert = "Hohoho"
        return copy
    }

    func onDelete() -> Void { 

    }
}

如何更改状态(或使用以下回调函数):

代码语言:javascript
运行
复制
struct ContentView: View { 
    var body: some View {
        Group {
            MyComponent() //-> with alert = "state 1"
            MyComponent().foo() //-> with alert = "state 2"
            MyComponent().foo(action: actionFunction) //-> how do this?
        }
    } 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-09 18:28:31

继续您的方法,这可能如下所示。作为替代,可以使用ViewModifier协议。

代码语言:javascript
运行
复制
struct MyComponen: View {
    @Binding var alert: String
    var action: (() -> Void)?
    var body: some View {
        VStack {
            Text("Alert: \(alert)")
            if nil != action {
                Button(action: action!) {
                    Text("Action")
                }
            }
        }
    }
}

extension MyComponen {

    func foo(perform action: @escaping () -> Void ) -> Self {
         var copy = self
         copy.action = action
         return copy
     }
}

struct TestCustomModifier: View {
    @State var message = "state 2"
    var body: some View {
        VStack {
            MyComponen(alert: .constant("state 1"))
            MyComponen(alert: $message).foo(perform: {
                print(">> got action")
            })
        }
    }
}

struct TestCustomModifier_Previews: PreviewProvider {
    static var previews: some View {
        TestCustomModifier()
    }
}
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58780177

复制
相关文章

相似问题

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