gpt4 book ai didi

ios - 如何在 SwiftUI 中实现类似 onAppear 的功能?

转载 作者:行者123 更新时间:2023-12-01 16:12:34 26 4
gpt4 key购买 nike

所以,我想创建一个自定义 View 并添加功能。如何实现 .onAppear(perform: (() -> Void)?) 之类的功能?我的代码不起作用,onDismiss关闭不调用 DashboardView .

struct DashboardView: View {

@State var employees = ["Alex", "Olga", "Mark"]
@State var presentEmployeeView = false

var body: some View {
NavigationView {
List {
Section {
Button(action: {
self.presentEmployeeView = true
}, label: {
Text("All employees")
}).buttonStyle(BorderlessButtonStyle())
}
}
}
.sheet(isPresented: $presentEmployeeView) {
EmployeesView(employees: self.employees).onDismiss {
self.presentEmployeeView = false
}
}
}
}

struct EmployeesView: View {
let employees: [String]

@State private var onDismissClosure: (() -> Void)? = nil
func onDismiss(perform action: (() -> Void)? = nil) -> some View {
self.onDismissClosure = action
return self
}

var body: some View {
NavigationView {
List {
ForEach(employees) { employee in
EmployeeCell(employee: employee)
}
}.navigationBarItems(leading:
Button(action: {
self.onDismissClosure?()
}, label: {
Text("Close")
})
)
}
}
}

最佳答案

这是可能的方法。测试并使用 Xcode 11.4/iOS 13.4

struct DashboardView: View {

@State var employees = ["Alex", "Olga", "Mark"]
@State var presentEmployeeView = false

var body: some View {
NavigationView {
List {
Section {
Button(action: {
self.presentEmployeeView = true
}, label: {
Text("All employees")
}).buttonStyle(BorderlessButtonStyle())
}
}
}
.sheet(isPresented: $presentEmployeeView) {
EmployeesView(employees: self.employees) {
self.presentEmployeeView = false
}
}
}
}

struct EmployeesView: View {
let employees: [String]
var onDismiss = {}

var body: some View {
NavigationView {
List {
ForEach(employees, id: \.self) { employee in
Text("\(employee)")
}
}.navigationBarItems(leading:
Button(action: {
self.onDismiss()
}, label: {
Text("Close")
})
)
}
}
}

更新:与修饰符一起使用的可能替代方法:
    ...
.sheet(isPresented: $presentEmployeeView) {
EmployeesView(employees: self.employees).onDismiss {
self.presentEmployeeView = false
}
}
}
}

struct EmployeesView: View {
let employees: [String]
var onDismiss = {}

func onDismiss(_ callback: @escaping () -> ()) -> some View {
EmployeesView(employees: employees, onDismiss: callback)
}

var body: some View {
NavigationView {
List {
ForEach(employees, id: \.self) { employee in
Text("\(employee)")
}
}.navigationBarItems(leading:
Button(action: {
self.onDismiss()
}, label: {
Text("Close")
})
)
}
}
}

关于ios - 如何在 SwiftUI 中实现类似 onAppear 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61039657/

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