Objective-C 库的 Swift “使用未声明的类型”

Posted

技术标签:

【中文标题】Objective-C 库的 Swift “使用未声明的类型”【英文标题】:Swift “use of undeclared type” for Objective-C library 【发布时间】:2017-02-22 14:46:29 【问题描述】:

我想在 Swift 项目中使用 Objective-C 库 https://github.com/ameingast/cocoaimagehashing。我用 Cocoapods 安装了它。 我不能使用它,它在构建时会引发以下错误:“使用未声明的类型”或“使用未解析的标识符”。

令人惊讶的是,当我编写 OSImageHashingProvider 并单击它时,它会跳转到它定义的 .h 文件中。

我在项目中添加了一个桥接头,但我没有理由相信它处于活动状态。

我在 Build Settings -> Swift Compiler - General / Objective C Brigding Header 中添加了它。

Build Settings -> Other Linker Flags 有 -ObjC。和 -l “CocoaImageHashing”。

我的 pod 是:

target 'Projectname' do
    pod 'CocoaImageHashing', :git => 'https://github.com/ameingast/cocoaimagehashing.git'
end

我不使用 use_frameworks!因为它在构建时引发错误。

解决办法是什么?

【问题讨论】:

你的 Swift 文件顶部有 import CocoaImageHashing 吗? 它不接受它,说'没有这样的模块'CocoaImageHashing'' 【参考方案1】:

问题是 Cocoapods 没有正确安装这个特定的库。

在目标级别,在 Build Settings -> Search Paths -> Header Search Paths 中: 当 /Headers/Public 结构不存在时,Cocoapods 生成的路径与任何实际的文件夹结构都不对应:“$PODS_ROOT/Headers/Public/CocoaImageHashing”。 我删除了它并保留了 $PODS_ROOT/CocoaImageHashing ,对应于文件夹 Projectname/Pods/Pods-Projectname.debug.xcconfig ,现在可以看到该库。

【讨论】:

以上是关于Objective-C 库的 Swift “使用未声明的类型”的主要内容,如果未能解决你的问题,请参考以下文章

将 Swift 导入 Objective-C - “使用未声明的标识符”

Github swift 存储库标记为 Objective-c

iOS AAChartKit 图表库的使用

iOS AAChartKit 图表库的使用

升级到 Swift 3 时使用未声明的类型

无法为本地pod框架桥接标头发出预编译头