Имея только тот код, которым вы поделились, трудно сказать, как именно вы должны это сделать, но вот пара хороших способов:
Первый способ - поместить строку в @State
переменная, так что она может быть видоизменена, и любое изменение в ней приведет к обновлению представления. Вот пример, который вы можете протестировать с помощью Live Previews:
import SwiftUI
struct UpdateTextView: View {
@State var textToUpdate = "Update me!"
var body: some View {
VStack {
Button(action: {
self.textToUpdate = "I've been udpated!"
}) {
Text("SignUp")
}
Text(textToUpdate)
}
}
}
struct UpdateTextView_Previews: PreviewProvider {
static var previews: some View {
UpdateTextView()
}
}
Если ваша строка хранится в классе, внешнем по отношению к представлению, вы можете использовать реализацию протокола ObservableObject
в вашем классе и сделайте строковую переменную @Published
, чтобы любое изменение в нем вызывало обновление представления. В представлении вам нужно сделать переменную класса @ObservedObject
до fini sh, подключив все это. Вот пример, с которым вы можете играть в Live Previews:
import SwiftUI
class ExternalModel: ObservableObject {
@Published var textToUpdate: String = "Update me!"
func registerRequest() {
// other functionality
textToUpdate = "I've been updated!"
}
}
struct UpdateTextViewExternal: View {
@ObservedObject var viewModel: ExternalModel
var body: some View {
VStack {
Button(action: {
self.viewModel.registerRequest()
}) {
Text("SignUp")
}
Text(self.viewModel.textToUpdate)
}
}
}
struct UpdateTextViewExternal_Previews: PreviewProvider {
static var previews: some View {
UpdateTextViewExternal(viewModel: ExternalModel())
}
}