无法在Swift项目中使用Objective-C库

时间:2015-04-01 13:30:46

标签: objective-c swift

我刚刚尝试在Swift项目中导入名为DDHotKey的Objective-C库,但在某些情况下它不起作用。

以下是我完成的步骤:

  • 下载“DDHotKey”存储库
  • 右键点击项目 - > “将文件添加到%project_name%” - >选择“DDHotKey-master”文件夹,选中“如果需要,复制项目”复选框和“创建文件夹参考”启用radiobutton
  • 根据Apple文档,然后会出现关于桥接标题的提示,但它没有 - 文件只是复制到项目的目录
  • 我尝试手动将桥接标题添加到项目中(文件 - >新建 - >源代码 - >标题文件),名称为“bridge.h”,在项目设置中设置它(构建设置 - > Swift编译器 - 代码生成 - > Objective-C桥接标题 - >“bridge.h”)并将以下代码放在此文件中:

#ifndef project_name_bridge_h
#define project_name_bridge_h

#import "DDHotKey-master/DDHotKeyCenter.h"

#endif

现在它编译以下代码:

var hotKeyCenter = DDHotKeyCenter.sharedHotKeyCenter()

但是当我尝试调用此对象的方法时,我遇到了错误:

hotKeyCenter.registerHotKeyWithKeyCode(34, modifierFlags: 0, task: (NSEvent) {
    println("str")
})
  

在调用

中缺少参数'action'的参数

虽然有两种方法,我使用不同的方法:

- (DDHotKey *)registerHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags target:(id)target action:(SEL)action object:(id)object;

- (DDHotKey *)registerHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags task:(DDHotKeyTask)task;

为什么呢?我究竟做错了什么?我该如何解决?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的闭包语法不正确。我想你的意思是:

hotKeyCenter.registerHotKeyWithKeyCode(34, modifierFlags: 0, task: { _ in
    println("str")
})

如果类型推断可以解决问题,_ in可能是不必要的,但我怀疑你需要它。但是,前导(NSEvent)不是正确的Swift语法。