如何使用绑定关联 Swift 枚举?
How to use Bind an Associative Swift enum?
我有一个 GroupView
接受绑定作为参数,因为我希望 GroupView 修改枚举中的数据。
有人能帮我完成这个吗?
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
VStack {
GroupView(group: /* What do i put here? */) // <----------------
}
}
}
struct GroupView: View {
@Binding var group: Group
var body: some View {
Text("Hello World")
}
}
class ViewModel : ObservableObject {
@Published var instruction: Instruction!
init() {
instruction = .group(Group(groupTitle: "A Group struct"))
}
}
enum Instruction {
case group(Group)
}
struct Group { var groupTitle: String }
好吧,这肯定会奏效...但可能有更好的方法来解决您的问题。但没有人比你更能确定这一点。所以我只回答你关于如何传递绑定的问题。
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
VStack {
GroupView(group: viewModel.groupBinding)
}
}
}
class ViewModel : ObservableObject {
@Published var instruction: Instruction!
init() {
instruction = .group(Group(groupTitle: "A Group struct"))
}
var groupBinding: Binding<Group> {
return Binding<Group>(get: {
if case .group(let g) = self.instruction {
return g
} else {
return Group(groupTitle: "")
}
}, set: {
self.instruction = .group([=10=])
})
}
}
我有一个 GroupView
接受绑定作为参数,因为我希望 GroupView 修改枚举中的数据。
有人能帮我完成这个吗?
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
VStack {
GroupView(group: /* What do i put here? */) // <----------------
}
}
}
struct GroupView: View {
@Binding var group: Group
var body: some View {
Text("Hello World")
}
}
class ViewModel : ObservableObject {
@Published var instruction: Instruction!
init() {
instruction = .group(Group(groupTitle: "A Group struct"))
}
}
enum Instruction {
case group(Group)
}
struct Group { var groupTitle: String }
好吧,这肯定会奏效...但可能有更好的方法来解决您的问题。但没有人比你更能确定这一点。所以我只回答你关于如何传递绑定的问题。
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
VStack {
GroupView(group: viewModel.groupBinding)
}
}
}
class ViewModel : ObservableObject {
@Published var instruction: Instruction!
init() {
instruction = .group(Group(groupTitle: "A Group struct"))
}
var groupBinding: Binding<Group> {
return Binding<Group>(get: {
if case .group(let g) = self.instruction {
return g
} else {
return Group(groupTitle: "")
}
}, set: {
self.instruction = .group([=10=])
})
}
}