Привязка с необязательным значением приводит к сбою во время выполнения.IOS

Программируем под IOS
Ответить
Anonymous
 Привязка с необязательным значением приводит к сбою во время выполнения.

Сообщение Anonymous »

У меня есть привязка с необязательной строкой в качестве типа, а в родительском представлении у меня есть условие if, которое проверяет, имеет ли оно значение или нет. В зависимости от этого условия я показываю или скрываю дочернее представление. Когда я указываю значение имени nil, приложение аварийно завершает работу. Ниже вы найдете пример кода.

Код: Выделить всё

class Model: ObservableObject {

@Published var name: String? = "name"

func makeNameNil() {
name = nil
}

}

struct ParentView: View {

@StateObject var viewModel = Model()

var nameBinding: Binding {
Binding {
viewModel.name
} set: { value in
viewModel.name = value
}
}

var body: some View {
VStack(alignment: .leading, spacing: 8) {
Text("Name is \(viewModel.name ?? "nil")")
Button("Make name nil") {
viewModel.makeNameNil()
}
if let name = Binding(nameBinding) {  /* looks like */
ChildView(selectedName: name) /* this causes the crash*/
}
}
.padding()
}
}

struct ChildView: View {

@Binding var selectedName: String

var body: some View {
VStack(alignment: .leading, spacing: 8) {
Text("Selected name: \(selectedName)")
HStack {
Text("Edit:")
TextField("TF", text: $selectedName)
}
}
}
}
Вот список сбоев.

Код: Выделить всё

Thread 1: EXC_BREAKPOINT (code=1, subcode=0x107e1745c)

AG::Graph::UpdateStack::update() ()
AG::Graph::update_attribute(AG::data::ptr, unsigned int) ()
AG::Subgraph::update(unsigned int) ()
Изображение

Для меня это похоже на ошибку switfui, следует ли мне избегать использования таких конструкций?

Подробнее здесь: https://stackoverflow.com/questions/762 ... time-crash
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»