我是 Swift 新手,来自 React,我确信我正在考虑状态错误。我有一个具有简单文本输入的视图。根据外部事件,我想更新此字段的内容以匹配当前的粘贴板内容。
struct ContentView: View {
@State var input: String = ""
var body: some View {
HStack {
VStack( alignment:.leading, spacing: 16, content:{
TextField("#000000", text: $input)
})
.padding()
}
}
func update(){
let pasteboard = NSPasteboard.general
let firstItem = pasteboard.pasteboardItems![0];
let string = firstItem.string(forType: NSPasteboard.PasteboardType(rawValue: "public.utf8-plain-text"))!
NSLog(string);
input = string;
}
}
一切似乎都有效,除了
input = string
不更新调试器中字段的内容(也不更新状态变量)我可以看到函数何时被调用,但它不会影响字段内容。
我只需要调用一些不同的 setState 函数吗?还是这不可能?
使用
.onAppear{...}
尝试此方法
struct ContentView: View {
@State var input: String = ""
var body: some View {
HStack {
VStack( alignment:.leading, spacing: 16, content:{
TextField("#000000", text: $input)
})
.padding()
}
.onAppear { update() } // <---here
}
func update(){
let pasteboard = NSPasteboard.general
let firstItem = pasteboard.pasteboardItems![0]
let string = firstItem.string(forType: NSPasteboard.PasteboardType(rawValue: "public.utf8-plain-text"))!
input = string
}
}
您需要阅读更多有关 SwiftUI 基础知识的内容,尤其是
@State
和 @Binding
的使用