SwiftUI ViewModel опубликованное свойство и привязка - PullRequest
0 голосов
/ 28 апреля 2020

Мой вопрос, вероятно, является результатом недопонимания, но я не могу понять его, поэтому вот оно:

При использовании такого компонента, как TextField или любого другого компонента, требующего привязки в качестве входных данных

TextField(title: StringProtocol, text: Binding<String>)

И View с ViewModel, я, естественно, думал, что могу просто передать свои свойства ViewModel @Published в качестве привязки:

class MyViewModel: ObservableObject { 
     @Published var title: String
     @Published var text: String
}

// Now in my view
var body: some View {
    TextField(title: myViewModel.title, text: myViewModel.$text)
}

Но я, очевидно, не могу, так как издатель не может действовать как обязательный. Насколько я понимаю, только свойство @State может действовать таким образом, но разве все свойства @State не должны существовать только в представлении, а не в модели представления? Или я мог бы сделать что-то подобное:

class MyViewModel: ObservableObject { 
     @Published var title: String
     @State var text: String
}

И если я не могу, как я могу перенести информацию в мою модель представления при обновлении моего текста?

1 Ответ

2 голосов
/ 28 апреля 2020

Вы были почти там. Вам просто нужно заменить myViewModel.$text на $myViewModel.text.

class MyViewModel: ObservableObject {

    var title: String = "SwiftUI"

    @Published var text: String = ""
}

struct TextFieldView: View {

    @ObservedObject var myViewModel: MyViewModel = MyViewModel()

    var body: some View {
        TextField(myViewModel.title, text: $myViewModel.text)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...