#swiftui
Вопрос:
У меня есть такой вид:
struct View1: View { @Binding var myVariable: Bool init() { _myVariable = Binding.constant(true) // It works but myVariable is immutable, so I can't edit myVariable } init(myVariable: Bindinglt;Boolgt;) { _myVariable = myVariable } var body: some View { Button("Change") { myVariable.toggle() } } } struct View2: View { var body: some View { View1() } } struct View3: View { @State var myVariable = false var body: some View { View1(myVariable: $myVariable) } }
И я хочу сделать следующее: если есть предоставленный параметр, установите его в значение myVariable, например, второй инициализации в View1. В противном случае установите первое значение myVariable, как в первом инициализации.
Я пытался использовать Binding.constant(значение), но оно неизменяемо. И я не могу редактировать переменную. Итак, мне нужен изменяемый инициализатор привязки, такой как Binding.constant(значение). Но я не могу его найти.
Как я могу решить эту проблему?
Комментарии:
1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.
Ответ №1:
Чтобы избежать чрезмерного усложнения View1
, вы можете создать промежуточное представление с таким именем, а затем создать private
«внутреннее» представление, имеющее фактическую реализацию.
Код:
private struct View1Internal: View { @Binding var myVariable: Bool var body: some View { Button("Change") { myVariable.toggle() } } }
struct View1: View { private enum Kind { case state case binding(Bindinglt;Boolgt;) } @State private var state = true private let kind: Kind init() { kind = .state } init(myVariable: Bindinglt;Boolgt;) { kind = .binding(myVariable) } var body: some View { switch kind { case .state: View1Internal(myVariable: $state) case .binding(let binding): View1Internal(myVariable: binding) } } }