SwiftUI 参数传递给不带参数的调用
Posted
技术标签:
【中文标题】SwiftUI 参数传递给不带参数的调用【英文标题】:SwiftUI Argument passed to call that takes no arguments 【发布时间】:2021-07-10 03:02:30 【问题描述】:错误:参数传递给不带参数的调用
解释:我有 2 个不同的视图,ContentView
和 MainView
。在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 参数传递给不带参数的调用的主要内容,如果未能解决你的问题,请参考以下文章