gpt4 book ai didi

swift - 由于某种原因,在 swift 中设置 @Binding 变量不会更改变量

转载 作者:行者123 更新时间:2023-12-01 10:06:39 25 4
gpt4 key购买 nike

我的代码如下:

class EditorWindow: NSWindow {
@Binding var keycode : Int

override func keyDown(with event : NSEvent) {
super.keyDown(with: event)

print("before", self.keycode, Int(event.keyCode))
self.keycode = Int(event.keyCode)
print("after", self.keycode, Int(event.keyCode))
}

init(keycode : Binding<Int>){
self._keycode = keycode
super.init(contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)

}
}

用于检测 osx 应用程序中的按键。它检测到按键,但由于某种原因,它没有设置 keycode @binding 变量(即在“之前”和“之后”打印语句中的值没有改变),这怎么可能?

编辑:为澄清起见,我在初始化期间传入的 keycode 变量是 @State 变量:
struct ContentView: View {

@State var keycode : Int = 0
...
}

...
class AppDelegate: NSObject, NSApplicationDelegate {

var window: NSWindow!
...

func applicationDidFinishLaunching(_ aNotification: Notification) {

let contentView = ContentView(userData: UserData(text:""))
window = EditorWindow(keycode: contentView.$keycode)
....
}
}

最佳答案

@Binding变量必须绑定(bind)到某些东西(例如 @State ),例如

struct TestNSWindowBinding: View {
@State var keyCode: Int = 0
var body: some View {
Text("Current key: \(keyCode)")
.onAppear {
let window = EditorWindow(keycode: self.$keyCode)
window.makeKeyAndOrderFront(nil)
}
}
}

如果没有绑定(bind)它只是提供自己的初始状态,将其视为外部存储,所以如果没有绑定(bind)则没有地方存储值,所以只能返回默认值。

关于swift - 由于某种原因,在 swift 中设置 @Binding 变量不会更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59516848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com