我在 SwiftUI 中使用 TextField() 時遇到了一個非常尷尬的問題。我要做的就是將文本欄位中的資料傳遞給一個類(用@ObservableObject 標記)。在這個類中,有一個名為 displayData() 的函式,它只是列印出文本欄位傳遞的資料。我會說 70% 的情況下,字串的最后一個字符丟失了。在這里讓我感到困擾的是它不會一直發生。這讓人很難弄清楚。
舉個例子,如果我在第一個 TextField() 中輸入 1234 say,print(self.username) 將回傳 123。當我嘗試添加第二個 4 時,它列印出 12344。
TextField() 和 SecureField() 都有這個問題。
這就是 ContentView 中發生的事情
TextField("Enter your username here.", text: self.$dataManager.username)
.padding()
SecureField("Enter your password here.", text: self.$dataManager.password)
.padding()
Spacer()
Button(action: {
self.dataManager.displayData()
}, label: {
Text("Send Data")
}).padding()
Spacer()
在課堂上:
var username: String = ""
var password: String = ""
func displayData(){
print("USERNAME: \(self.username), PASSWORD: \(self.password)")
}
非常感謝!
uj5u.com熱心網友回復:
為了讓您的username和password屬性正確系結到您的欄位,您需要@Published在您的ObservableObject.
以下版本有效并且不會遇到您提到的問題:
class ViewModel : ObservableObject {
@Published var username = ""
@Published var password = ""
func displayData(){
print("USERNAME: \(self.username), PASSWORD: \(self.password)")
}
}
struct ContentView : View {
@StateObject var dataManager = ViewModel()
var body: some View {
TextField("Enter your username here.", text: self.$dataManager.username)
.padding()
SecureField("Enter your password here.", text: self.$dataManager.password)
.padding()
Spacer()
Button(action: {
self.dataManager.displayData()
}, label: {
Text("Send Data")
}).padding()
Spacer()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314768.html
