【问题标题】:SwiftUI Argument passed to call that takes no argumentsSwiftUI 参数传递给不带参数的调用
【发布时间】: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

标签: swift swiftui


【解决方案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()(你的第二选择)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多