Swift Bridging Header - Использование необъявленного типа "FMDatabase"

Я просмотрел все другие сообщения с той же ошибкой (использование необъявленного типа), но все же не могу определить, что не так с моим проектом.

Разница с другими случаями заключается в том, что я могу успешно использовать FMDatabase в классах AppDelegate и ViewController, но не из другого класса, который я создал, хотя в том же проекте, что и классы AppDelegate и ViewController.

И "успешно использовать", я имею в виду, что я могу получить доступ к базе данных и таблицам в ней.

Также обратите внимание, что мне не нужно было импортировать что-либо для использования FMDatabase в AppDelegate или ViewController.

Пока что я сделал (Xcode. 6.4 Swift 1.2):

  • Создал единый проект быстрого просмотра.

  • Установленный FMDB с использованием cocoapods (https://cocoapods.org/?q=fmdb)

  • Создан заголовок моста для FMDB

Я могу успешно объявить и использовать FMDatabase из классов AppDelegate.swift и ViewController.swift.

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.

Для любых подсказок или идей, спасибо заранее.

Ответ 1

Это потому, что DBUtil является частью целевого объекта BridgingHeaderTests (но делегат приложения и диспетчер представлений не являются), но эта цель не настроена для FMDB (настройка "Objective-C Bridging Header" для тестовая цель пуста).

Вы можете:

  • Удалите DBUtil из целевой цели:

    введите описание изображения здесь

  • Или укажите заголовок моста для цели тестирования:

    введите описание изображения здесь

Ответ 2

Я оставляю здесь ответ для других случаев: у меня такая же ошибка, но проблема была в моем заголовочном заголовке, я забыл написать #import "FMDatabase.h"

Ответ 3

Если вы установили FMDB с CocoaPods, просто добавьте

import FMDB

в быстром файле, где вы используете FMDatabase..

Ответ 4

В моем случае была та же ошибка. Я исправил это, добавив только файлы .h и .m(а не папку) для проекта, отметив "копировать элементы при необходимости" && создавать группы и создавать их. Затем созданный obj c мостовой заголовок.

В Target Build Phases-Link Binary с библиотеками - добавлен libsqlite3.tbd. Включенный контент embed содержит быстрый код в Yes.

Он решил эту ссылочную проблему.