如何在Swift中创建具有函数名的单独数据映射文件



我有一个在Swift中创建的macOS应用程序,我集成了一个外部HID设备,上面有很多控件。HID部分是在我从设备接收所有隐藏命令的地方完成的,我试图创建一个映射文件,在那里我可以在一个单独的swift文件中维护HID密钥映射。我只想在那个文件中保存数据,我想做的就是这样;

  • 从hid设备接收原始隐藏数据(在ViewController中(
  • 查找分配给此隐藏数据的函数名(在单独的文件中(
  • 运行映射到该键的函数。(函数位于主ViewController中(

到目前为止,我已经用所有映射设置了外部swift文件,一切都很好,但我的问题是,当我试图调用ViewController中的查找函数时,它说在作用域中找不到该函数。

起初我想我会使用委托,但外部文件不是视图控制器,只是一个单独的swift文件,所以我不知道我是否能做到这一点?。

我试过搜索,但我找到的都是从另一个ViewController调用函数,而我不是。很可能我没有使用最好的方法,我的目标是将所有映射保存在一个单独的文件中,因为有很多映射,而且更容易维护。

欢迎提出任何建议。

这是实现这一目标的一种方法。它可能会变得乏味。您可以完全跳过为代理编写单独的协议,但这是一种更干净的设计。

protocol HIDMessageDelegate: AnyObject {
// example messages
func message1()
func message2()
func message3()
}
class HIDMessageParser {
static weak var delegate: HIDMessageDelegate?
static func parseHIDMessage() {
var condition = 0
// this is where your switch statement will go and you'll parse things and call the relevant delegate method
switch (condition) {
default:
delegate?.message1()
}
}
}
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
HIDMessageParser.delegate = self
}
}
extension MyViewController: HIDMessageDelegate {
func message1() {
}
func message2() {
}
func message3() {
}
}

您可以简单地创建一个UIViewController作为外部文件,并将其作为属性添加到主ViewController中。

在外部文件中添加此。

@IBOutlet var uiViewController: UIViewController!

在ViewController中添加此。

var externalFileViewController: UIViewController!
override func viewDidLoad() {
super.viewDidLoad()
externalFileViewController = externalFileViewController?.loadView()
// If we have an object then load it
if let viewController = externalFileViewController {
viewController.view.frame = view.frame
viewController.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
view.addSubview(viewController.view)
uiViewController = viewController
}
}

现在,在viewController中,从外部文件中查找要调用的函数,并使用函数名进行调用。

这些函数是使用@IBAction在外部文件中定义的。

如果你有任何问题,请告诉我。

相关内容

  • 没有找到相关文章

最新更新