SwiftUI Function 声明一个 Opaque 返回类型,在一个 View 中插入两个按钮?

Posted

技术标签:

【中文标题】SwiftUI Function 声明一个 Opaque 返回类型,在一个 View 中插入两个按钮?【英文标题】:SwiftUI Function declares an Opaque return type, inserting two buttons in one View? 【发布时间】:2020-05-11 20:59:22 【问题描述】:

我想构建一个简单的 SwiftUI ContentView.swift。在此应用程序的视图窗格中,它将包含两个按钮,其中隐含了它们的图像。我想过为每个按钮一个一个添加一个功能,然后让 SwiftUI 显示每个元素。我已经查看了一些与返回类型相关的问题,尽管如果我只有一个 Button(),你会在哪里添加返回类型让我感到困惑。我的代码很短,是不是很容易看出我哪里出错了哪里没有包含return?

struct ContentView: View 
    var body : some View 
        func Button1()
        Button(action: 
         print("Here is a bit of information.")
        ) 
            Image(systemName: "info")
                .padding()
                .background(Color.green)
                .font(.largeTitle)
                .foregroundColor(Color.orange)
                .frame(width: 300, height: 600)
        
        
        func Button2()
        Button(action: 
            print("You have erased it.")
        ) 
            Image(systemName: "trash")
            .padding()
                .background(Color.red)
                .font(.largeTitle)
                .foregroundColor(Color.white)
                .frame(width: 426, height: 620)
        
        
            

我希望这两个按钮会出现在屏幕的第一个视图中,然后我可以在我了解代码中的位置后编辑它们将执行的操作。谢谢你的洞察力:)

【问题讨论】:

【参考方案1】:

你可以这样做:

struct ContentView: View 
    var body: some View 
        VStack 
            Button(action: 
                print("Here is a bit of information.")
            ) 
                Image(systemName: "info")
                    .padding()
                    .background(Color.green)
                    .font(.largeTitle)
                    .foregroundColor(Color.orange)
                    .frame(width: 300, height: 600)
            
            Button(action: 
                print("You have erased it.")
            ) 
                Image(systemName: "trash")
                    .padding()
                    .background(Color.red)
                    .font(.largeTitle)
                    .foregroundColor(Color.white)
                    .frame(width: 426, height: 620)
            
        
    

【讨论】:

谢谢你。最后一件事,在代码的倒数第二个括号中完成此语句后,我尝试添加 > return Button() 但我仍然遇到一个问题“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”我该怎么做结束这段代码?最后的“返回”行包含什么? 为什么要在body里面使用return?您需要做的,如上面的代码所示,将 Elements 嵌套在 Stacks 中,您永远不需要 return 语句。我真的不明白你在做什么。您不需要按钮的功能。使用新代码更新您的问题,以便我们查看问题所在 啊,我明白了。是的,我能够运行代码,消除额外的功能。问题已解决,谢谢 Frankenstein 和 @PedroCavaleiro @Tomato_code 如果您觉得答案有帮助,请考虑点赞并标记为正确答案。 是的,谢谢。我的声望点太低,以至于我的投票不能被视为赞成票 xD,但我确实赞成。再次感谢用户 Frakenstein。

以上是关于SwiftUI Function 声明一个 Opaque 返回类型,在一个 View 中插入两个按钮?的主要内容,如果未能解决你的问题,请参考以下文章

OPA690,OPA842,OPA228,OPA192做跟随器使用总结

OPA 冲突政策

声明式 UI 编程探索-构建 SwiftUI 风格的 UI 框架 | GMTC

如何在 SWIFTUI 正文视图中使用声明的变量

SwiftUI:函数声明了一个不透明的返回类型,但其主体中的返回语句没有匹配的底层类型

开放策略代理 (OPA) Rego - 在运行时访问输入对象嵌套字段