【问题标题】:Swift Bridging Header - Use of undeclared type 'FMDatabase' errorSwift 桥接头 - 使用未声明的类型“FMDatabase”错误
【发布时间】:2015-10-28 12:55:38
【问题描述】:

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

与其他情况的不同之处在于,我可以在 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 创建了桥接头

我可以从 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 提供复制器。

如有任何提示或想法,请提前致谢。

【问题讨论】:

  • 您是否尝试过明确的导入语句?另外,是否将 DBUtil 添加到同一目标?只是几个想法......
  • @RomanSausarnes 感谢您的评论。我确实尝试过导入,但仍然找不到要导入的内容。另请注意,我不需要导入任何内容即可从 AppDelegate 或 ViewController 访问它。是的,DBUtil 与 AppDelegate 和 ViewController 在同一个项目中,所以它应该是同一个目标,除非我错过了什么。
  • 文件可以有不同的目标,即使它们在同一个项目中。查看右侧可滑动面板中的检查器选项卡中的一些复选框,以确保已将其添加到哪些目标。这肯定会解释你所看到的行为。

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


【解决方案1】:

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

您可以:

  1. 从测试目标中删除DBUtil

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

【讨论】:

  • Rob:准点!!!!非常感谢。教训:必须将桥接头添加到测试目标(当然,在适当的时候),但要记住一些事情。
  • 2 号解决了我的 Swift 无法识别 obj-C 的问题
  • 难以置信,我遇到了同样的问题。我的 DatabaseHelper.swift 文件有 2 个不同的目标成员,一个是无意的。我一直在想我可能错过了构建设置中的某些内容:/
【解决方案2】:

我在这里留下其他情况的回复:我遇到了同样的错误,但问题出在我的桥接头上,我忘了写#import "FMDatabase.h"

【讨论】:

    【解决方案3】:

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

    import FMDB
    

    在您使用 FMDatabase 的 swift 文件中..

    【讨论】:

      【解决方案4】:

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

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

      它解决了这个参考问题。

      【讨论】:

      • 嗨,George,我也遇到了类似的问题,AMSmoothAlert(安装在 Pods 中),如何让它在 swift 中使用?
      猜你喜欢
      • 1970-01-01
      • 2015-10-17
      • 2018-11-16
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      相关资源
      最近更新 更多