SwiftUI 参数传递给不带参数的调用

Posted

技术标签:

【中文标题】SwiftUI 参数传递给不带参数的调用【英文标题】:SwiftUI Argument passed to call that takes no arguments 【发布时间】:2021-07-10 03:02:30 【问题描述】:

错误:参数传递给不带参数的调用

解释:我有 2 个不同的视图,ContentViewMainView。在MainView 中有一个@Binding 变量,即@Binding var showMenu: Bool。当我尝试使用参数调用MainView 时,我得到了上面指定的错误。

代码片段:

struct ContentView: View 
@State var showMenu = false
var body: some View 
    GeometryReader  geometry in
        MainView(showMenu: $showMenu)
            .frame(width: geometry.size.width, height: geometry.size.height)
            .offset(x: self.showMenu ? geometry.size.width/2 : 0)
            .disabled(self.showMenu ? true : false)
        
    

struct MainView: View 
@Binding var showMenu: Bool
//unrelated variable declarations
init() 
    //unrelated code

var body: some View 
    //unrelated code

【问题讨论】:

你能说明init()中的“无关代码”是如何初始化showMenu的吗?您应该做的是让初始化程序接受Binding<Bool> 并将其分配给showMenu,这让我想知道您当前如何初始化showMenu init()里面的代码是UINavigationBar.appearance().barTintColor = UIColor(#colorLiteral(red: 0.7450980544, green: 0.1568627506, blue: 0.07450980693, alpha: 1))UINavigationBar.appearance().titleTextAttributes = [.foregroundColor: UIColor.white]UINavigationBar.appearance().isTranslucent = false 【参考方案1】:

问题出在这一行:

init() 
    //unrelated code

当您这么说时,您说制作 MainView 的唯一方法就是说 MainView()。所以你现在不能说MainView(showMenu:...)确实是真的。

我可以看到您有三个主要选择:

删除整个init()

将整个 init() 替换为以下内容:

init(showMenu: Binding<Bool>) 
    self._showMenu = showMenu
    // other stuff?

重新思考架构。 (我们需要更多地了解这个绑定的用途。)

【讨论】:

init() 中的代码是 3 行 UINavigationBar,带有 barTintColor、titleTextAttributes 和 isTranclucent。我可以将这些转移到其他地方吗?如果可以,如何转移? 那些在onAppear 中更合适吗?但老实说,我什至不知道这种外观代理代码是否适合 SwiftUI。 SwiftUI 是否甚至 UINavigationBars? @matt onAppear 可能为时已晚。 SwiftUI 导航栏非常hacky,你通常只需在init 中设置.appearance()(你的第二选择)

以上是关于SwiftUI 参数传递给不带参数的调用的主要内容,如果未能解决你的问题,请参考以下文章

传递给在 SwiftUI 中不带参数的调用的参数

错误:传递给不带参数 SwiftUI 的调用的参数

MS Access:将参数传递给不带 SQL 的子报表

如何将参数传递给不带字符串的函数(Pyspark)

如何将带有 args 的成员函数作为参数传递给另一个成员函数?

通过javascript将参数传递给动作不会传递整数值