Swift Bridging Header - 使用未声明的类型' FMDatabase'错误

时间:2015-08-05 16:15:39

标签: ios objective-c xcode swift xcode6.4

我看了所有其他帖子都有同样的错误(使用未申报的类型),但仍然无法弄清楚我的项目有什么问题。

与其他情况的不同之处在于,我可以在AppDelegate和ViewController类中成功使用FMDatabase,但不能从我创建的其他类中成功使用,但在与AppDelegate和ViewController类相同的项目中。

通过"成功使用",我的意思是我可以访问其中的数据库和表格。

另请注意,我无需导入任何内容即可在AppDelegate或ViewController中使用FMDatabase。

到目前为止我做了什么(Xcode.6.4 Swift 1.2):

  1. 创建了一个单一的swift项目。

  2. 使用cocoapods安装FMDB(https://cocoapods.org/?q=fmdb

  3. 为FMDB创建了一个桥接标题

  4. 我可以从AppDelegate.swift和ViewController.swift类成功声明和使用FMDatabase。

    AppDelegate.swift

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        var database: FMDatabase? // OK
        ...
    

    ViewController.swift

    class ViewController: UIViewController {
    
        var database: FMDatabase? // OK
        ...
    

    在DBUtil.swift中虽然我收到了“使用未声明的类型'FMDatabase'”错误。

    DBUtil.swift

    class DBUtil {
    
        var database: FMDatabase? // Error: "Use of undeclared type 'FMDatabase'
    
    }
    

    Swift Bridging Header可以使用复制器。

    对于任何提示或想法,请提前感谢。

4 个答案:

答案 0 :(得分:17)

这是因为DBUtilBridgingHeaderTests目标的一部分(但是app委托和视图控制器不是),但是没有为FMDB配置该目标(“Objective-C桥接标题” “测试目标的设置为空”。

你可以:

  1. 从测试目标中删除DBUtil

    enter image description here

  2. 或者为测试目标指定桥接头:

    enter image description here

答案 1 :(得分:1)

我在这里留下了对其他案件的回复:我得到了同样的错误,但问题出在我的桥接标题中我忘了写#import "FMDatabase.h"

答案 2 :(得分:1)

如果您使用CocoaPods安装了FMDB,只需添加

即可
import FMDB

在你正在使用FMDatabase的swift文件中。

答案 3 :(得分:0)

我的情况是同样的错误。我通过添加.h和.m文件(不是文件夹)来修复它,通过勾选“需要时复制项目”和&&创建组并成功。然后创建了obj c桥接头。

在Target的构建阶段 - 链接二进制文件库 - 添加了libsqlite3.tbd。 转为嵌入内容包含快速代码为是。

它解决了这个参考问题。