【问题标题】:Swift Can't Import Sqlite3 iOSSwift 无法导入 Sqlite3 iOS
【发布时间】:2014-07-26 18:46:36
【问题描述】:

我在我的项目中添加了libsqlite3.0.dylib,然后我尝试使用以下代码导入:

import UIKit
import sqlite3

class Dataware: NSObject
{

}

但它给了我这个错误:

没有这样的模块'sqlite3'

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    将其添加到您的 Bridging-Header.h 文件中:

    #import <sqlite3.h>
    

    这是导入任何 C 语言库的主要机制。

    如果您还没有 Bridging-Header.h 文件:

    1. 添加文件 Bridging-Header.h(或更常见的是 (ProjectName)-Bridging-Header.h
    2. 转到项目的构建设置选项卡
    3. 找到“Objective-C 桥接头”。最简单的方法是搜索桥接。
    4. 输入您在第一步中创建的文件的名称和路径。可能是 (ProjectName)/(ProjectName)-Bridging-Header.h

    【讨论】:

    • 我在哪里将它添加到我的项目中?
    • 我添加了这个文件并导入了 sqlite3.h 但对于 .swift 我使用 var dbsql=sqlite3() 这一行。但是使用未解决的标识符“sqite3”错误到达
    【解决方案2】:

    当想要将 sqlite 添加到 framework 目标时,需要 module.map
    因为 sqlite 没有被映射,所以这样做只是:
    1. 在您的项目“module/module.map”中创建文件
    2. 从伞头创建模块:

        module sqlite3 [system] {
           header "/Applications/Xcode6-Beta5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/usr/include/sqlite3.h"
           link "sqlite3"
           export *
        }
    

    *将路径中的Xcode6-Beta5.app改成右边的
    3. 将映射文件连接到您的项目,在“构建设置”中搜索“导入路径”并输入模块文件的完整路径

    【讨论】:

    • 当我尝试将 sqlite 添加到我的 swift 框架时,此解决方案对我有用
    • 嗨@本。您能否详细说明您的答案。我不知道如何添加新模块
    • 嗨@RatikantaPatra,要添加新的模块映射,您需要:[1]创建名为module.map的文件[2]添加想要的模块信息(如我的回答)[3]在Xcode中转到 Build Settings->set Swift Compiler->Search Paths->Import Paths 到您放置 module.map 文件的目录
    • 是否可以将该文件中的绝对路径更改为 $(SDKROOt) 之类的东西?你知道 module.map 文件是否支持类似的东西吗?
    • @StefanArentz 模块映射文件没有,但您可以使用 xcconfig 文件来引用每个平台的不同 MODULEMAP_FILE 路径。有关示例,请参见 my answer to another question 或我的 SQLite.swift 框架(在 swift-1-2 分支上)。
    【解决方案3】:

    我们需要将 SQLite3 的头文件导入视图控制器,以便编译器可以看到构成 API 的函数和其他定义。

    没有办法直接将头文件导入Swift代码,因为SQLite3库没有打包成模块。

    解决这个问题的最简单方法是在项目中添加一个桥接头。一旦你有了桥接头,你可以添加其他头文件,Swift 编译器会读取这些头文件。有几种方法可以添加桥接文件。我们将使用两者中更简单的一个,即临时将一个 Objective-C 类添加到项目中。现在就开始吧。

    File ➤ New ➤ File.... 在对话框的 iOS 部分,选择 Cocoa Touch 类,然后按下一步。将类命名为 Temporary,使其成为 NSObject 的子类,将语言更改为 Objective-C,然后按 Next。在下一个屏幕中,按 创建 按钮。 当你这样做时,Xcode 会弹出一个窗口询问你是否要创建一个桥接头。按。 现在,在 Project Navigator 中,您将看到新类(Temporary.mTemporary.h)的文件和名为 SQLite 的桥接头 Persistence-Bridging-Header.h。删除 Temporary.m 和 Temporary.h 文件——你不再需要它们了。选择 bridging header 在编辑器中打开它,然后在其中添加以下行:

    #import

    现在编译器可以看到 SQLite3 库和头文件,我们可以在 ViewController.swift

    中编写更多代码

    就是这样!

    【讨论】:

      【解决方案4】:

      您好,请按照以下步骤操作

      在 xcode 8.3.3 中使用 swift 3

      1. 转到构建阶段选项卡
      2. 转到 Link Binary with Libraries 子选项卡。

        (a) 点击+按钮添加sqlite框架然后搜索sqlite可以看到libsqlite3.0.tbd和libsqlite3.tbd

        (b) 然后只选择libsqlite3.tbd(不要同时添加,因为在viewController中声明时编译器找不到sqlite3 stuct)

      3. 然后添加 Bridging-Header.h 文件(因为sqlite不是swift写的)

      4. 桥接名称应该是您的 Projectname-Bridging-Header.h 文件(仅用于命名约定,非强制性)
      5. 在您的桥接头文件中写入#import &lt;sqlite3.h&gt;
      6. 转到构建设置选项卡

        (a) 在构建设置选项卡下搜索 Swift Compiler - General 选项并将YES 设置为 Install Objective-C compatible Header

        (b) 在Objective-C Bridging Header选项中设置你的头文件名称和路径(或者你可以简单地拖动桥接头文件)

      【讨论】:

        猜你喜欢
        • 2017-02-27
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 2019-07-19
        • 2017-05-17
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多