Статистическое поле c @state - PullRequest
1 голос
/ 12 марта 2020

У меня есть текстовое поле, и мне нужно изменить текст в текстовом поле, используя функцию stati c.

import SwiftUI

struct MainScreen: View
{
   @State static var mytext = "TEXT"
   var body: some View
   {
       Text(MainScreen.mytext)
   }

   public static func showtext(newtext: String)
   {
       MainScreen.mytext = newtext
   }
}

Как я могу это сделать? Или как мне получить MainScreen.self в функции stati c, если я буду использовать @State var mytext = "TEXT"?

PS: извините за мой Engli sh)))

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Независимо от причины, по которой это необходимо, пожалуйста, найдите ниже возможный подход для достижения требуемого поведения. Протестировано и работает с Xcode 11.2 / iOS 13.2

import Combine

struct MainScreen: View
{
    // shared publisher
    static let publisher = PassthroughSubject<String, Never>()

    @State private var mytext = "TEXT" // << !! can be only per-view, make always private
    var body: some View
    {
        VStack {
            Text(mytext)
                .onReceive(MainScreen.publisher) { value in // listen for shared publisher
                    self.mytext = value // update with new value
            }

            // this button is just for demo
            Button("Show") { MainScreen.showtext(newtext: "Updated Text!") }
        }
    }

    public static func showtext(newtext: String)
    {
        MainScreen.publisher.send(newtext) // post via shared publisher
    }
}
0 голосов
/ 12 марта 2020

Я не понимаю, почему вы настаиваете на использовании функции stati c для изменения текста ...

Возможно, я ошибаюсь, но попробуйте это:

struct MainScreen: View {
@State var myText: String = "Default Text"
var body: some View {
    Text("\(myText)")
}

func changeText(newText: String) {
    self.myText = "New Text Now"
}
}

Это может сработать для меня, и я надеюсь, что это поможет и вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...