gpt4 book ai didi

swift - 将带有状态变量的函数传递给 subview

转载 作者:行者123 更新时间:2023-12-03 23:49:17 24 4
gpt4 key购买 nike

我正在尝试将不同的功能传递给 subview 。为此,我使用 typalias和不同的初始化程序。

当我尝试传递 @State 时出现错误-多变的。我需要如何设置 Binding - subview 中的变量?

错误如下:

Cannot assign value of type 'Bool' to type 'Binding'



这是我的代码:

typealias OnTabHandler = (String) -> Void

struct ContentView: View {
@State var showSheet = false

var onTabHandler:OnTabHandler = { text in
print(text)
}

var body: some View{
VStack{
// print to console
ChildView(text: "Hello", onTabHandler: onTabHandler)

// show sheet
ChildView()
.sheet(isPresented:$showSheet){ Text("sheet view")}
}
}
}

struct ChildView:View{
var text:String
var onTabHandler:OnTabHandler
var showSheet:Binding<Bool>

// print to console
init(text:String, onTabHandler:@escaping OnTabHandler){
self.text = text
self.onTabHandler = onTabHandler
self.showSheet = Binding.constant(false)
}

// show sheet
init(showSheet:Binding<Bool>){
self.showSheet = showSheet
self.onTabHandler = {_ in

// Error here
self.showSheet = true
}
self.text = ""
}

var body: some View{
Button("Tab Me"){
self.onTabHandler(self.text)
}
}
}

最佳答案

是结构体,不能使用self在这种情况下,因为它实际上会尝试复制尚未完成的构造值...相反,您可以直接使用绑定(bind),因为绑定(bind)实际上是引用的持有者,因此在您的情况下正确和有效的方法是

self.onTabHandler = {_ in

showSheet.wrappedValue = true
}

关于swift - 将带有状态变量的函数传递给 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60019484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com