【问题标题】:Unable to use Objective-C library in Swift project无法在 Swift 项目中使用 Objective-C 库
【发布时间】:2015-04-01 13:30:45
【问题描述】:

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

以下是我已完成的步骤:

  • 下载“DDHotKey”存储库
  • 右键单击项目 -> “将文件添加到 %project_name%” -> 选择“DDHotKey-master”文件夹,勾选“如果需要,复制项目”复选框并启用“创建文件夹引用”单选按钮
  • 根据Apple文档,此时应该会出现有关桥接头的提示,但它没有tt--文件刚刚复制到项目目录
  • 我尝试手动将桥接头添加到项目中(文件 -> 新建 -> 源文件 -> 头文件),名称为“bridge.h”,在项目设置中进行设置(构建设置 -> Swift 编译器- 代码生成 -> Objective-C Bridging Header -> "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;

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

提前致谢。

【问题讨论】:

    标签: objective-c swift


    【解决方案1】:

    您的闭包语法不正确。我认为您的意思如下:

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

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

    【讨论】:

    • 啊,对不起,非常感谢。不幸的是,它现在没有链接——由于某种原因,它没有看到像 DDHotKeyCenter 这样的符号,并给我一个错误“架构 x86_64 的未定义符号:“_OBJC_CLASS_$_DDHotKeyCenter”。这种行为的原因可能是什么?
    • 这是一个不相关的问题。您几乎可以肯定没有链接 DDHotKeyCenter。如果您认为是,请在一个新问题中描述您的情况(尽管搜索 SO 以将 objc 链接到 swift 可能会对您有所帮助)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多