Я пытаюсь передать различные функции дочернему виду. Для этого я использую typalias
и разные инициализаторы.
При попытке передать переменную @State
я получаю сообщение об ошибке. Как мне установить переменную Binding
в дочернем представлении?
Ошибка выглядит следующим образом:
Невозможно присвоить значение типа 'Bool' для типа '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)
}
}
}