SwiftUI在子视图确认后从视图执行方法



是否在技术上可以从视图中调用方法后从子视图获得确认?如果我将viewModelitem传递给它,我可以从SubStruct调用它,但我只是对下面导致

的代码感到好奇

Segmentation Fault: 11

import SwiftUI
struct ContentView: View {
var body: some View {
MainStruct(viewModel: MyViewModel())
}
}
struct MainStruct: View {
@StateObject var viewModel: MyViewModel
@State var functionToPass: ()

let items = ["test1", "test2", "test2"]

var body: some View {
ForEach(items, id: .self) { (item) in
Text(item).onTapGesture {
functionToPass = viewModel.deleteItem(name: item)
}
}

SubStruct(passedFunction: {functionToPass})
}

struct SubStruct: View {
var passedFunction: () -> Void

var body: some View {
Button(action: {passedFunction()}, label: {
Text("confirm deletion")
})
}
}

}
class MyViewModel: ObservableObject {
func deleteItem(name: String) {
print(name)
///deletion logic
}
}

试试这个:

struct MainStruct: View {
@StateObject var viewModel: MyViewModel
@State private var functionToPass: () -> Void = {}
let items = ["test1", "test2", "test2"]
var body: some View {
VStack {
ForEach(items, id: .self) { item in
Text(item)
.onTapGesture {
functionToPass = {
viewModel.deleteItem(name: item)
}
}
}
SubStruct(passedFunction: functionToPass)
}
}
struct SubStruct: View {
var passedFunction: () -> Void
var body: some View {
Button(action: {
passedFunction()
}, label: {
Text("confirm deletion")
})
}
}
}

最新更新