将数据从简单NSView传递到SwiftUI视图的方法有多种,以下是其中一种常见的方法:
import SwiftUI
import Combine
class DataModel: ObservableObject {
@Published var keyCode: Int = 0
}
import Cocoa
import SwiftUI
class CustomNSView: NSView {
var dataModel: DataModel
init(dataModel: DataModel) {
self.dataModel = dataModel
super.init(frame: .zero)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func keyDown(with event: NSEvent) {
dataModel.keyCode = Int(event.keyCode)
}
}
struct ContentView: View {
@EnvironmentObject var dataModel: DataModel
var body: some View {
Text("Key Code: \(dataModel.keyCode)")
}
}
import SwiftUI
@main
struct MyApp: App {
@StateObject private var dataModel = DataModel()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(dataModel)
}
}
}
这样,当在NSView中按下键盘时,会更新DataModel中的keyCode属性的值。SwiftUI视图ContentView会自动更新并显示最新的keyCode值。
这种方法的优势是可以实现数据的双向绑定,当DataModel中的数据发生变化时,SwiftUI视图会自动更新。同时,这种方法也适用于其他类型的数据传递,不仅限于键盘事件。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云云原生应用引擎(TKE)。
领取专属 10元无门槛券
手把手带您无忧上云