Для этого вы можете использовать так называемого издателя:
public let subject = PassthroughSubject<String, Never>()
Затем, внутри вашего блока таймера, вы звоните:
self.subject.send()
Как правило, вы хотите, чтобы вышеуказанный код был за пределами вашегоОбъявление SwiftUI UI.
Теперь в вашем коде SwiftUI вам необходимо получить следующее:
Text(typedString)
.onReceive(<...>.subject)
{ (string) in
self.typedString = string
}
<...>
необходимо заменить тем, где находится ваш объект subject
. Например (как взлом на AppDelegate
):
.onReceive((UIApplication.shared.delegate as! AppDelegate).subject)
Я знаю, что выше должно работать, когда typedString
это @State
:
@State private var typedString = ""
, но я думаю, этотакже должен работать с @Binding
;просто еще не пробовал.