Swift調用C語言自建函數庫的方法

本程序示範瞭如何用Swift調用自定義C語言模塊的方法。您能夠直接在github下載本程序,或者按照如下教程逐步完成。git

簡介

示範程序中有一個C語言的源程序CSwift.C和一個頭文件CSwift.h,咱們的目標是構造一個CSwift的函數庫,可以讓swift源程序執行CSwift程序中的函數。github

快速上手

本程序須要Swift 3.0以上版本。編程

下載、編譯和測試swift

$ git clone https://github.com/RockfordWei/CSwift.git
$ cd CSwift
$ swift build
$ swift test

源程序採用C語言寫成,測試程序則是Swift語言編寫。所以若是經過測試,則恭喜您,已經成功實現了Swift語言調用C語言的整個過程。xcode

詳細步驟

您能夠徹底不依賴全部上述內容,而一步一步從零開始製做C函數庫和調用C庫的Swift代碼:bash

構造空白的函數庫

仍然假定函數庫名稱爲CSwift。首先找一個空白目錄,而後執行:微信

$ mkdir CSwift
$ cd CSwift
$ swift package init --type=system-module
$ mkdir CSwift
$ cd CSwift
$ swift package init
$ mv Tests ..
$ mkdir include
$ mv ../module.modulemap inlcude/
$ rm Package.swift
$ rm -rf Sources
$ echo > CSwift.c
$ echo > include/CSwift.h
$ cd ..

細心的讀者會發現,上面的bash 命令行在CSwift 文件夾下面創建了第二個CSwift文件夾,可是使用了不一樣的swift package了命令。第一個命令是「建立swift空白項目,並且項目類型是系統模塊」;而第二個命令是「建立swift 空白項目,項目類型是函數庫」。這種作法主要是爲了可以在同一個項目中用Swift去測試C語言的模塊。其次,在第二個CSwift 子目錄下,還創建了一個include 文件夾,並分別創建了兩個空白源程序文件 CSwift.c 和 CSwift.h函數

Module Map

下一步是修理一下目標的模塊映射表。請把module.modulemap修改成以下程序:測試

module CSwift [system] {
  header "CSwift.h"
  link "CSwift"
  export *
}

C模塊編程

好了,如今請在Source文件夾下面創建兩個C語言文件:CSwift.c和CSwift.h,內容以下:ui

CSwift/CSwift/include/CSwift.h

extern int c_add(int, int);
#define C_TEN 10

CSwift/CSwift/CSwift.c

#include "include/CSwift.h"
int c_add(int a, int b) { return a + b ; }

到此爲止,C語言函數庫就應該準備好了。

Swift 程序調用

請修改Tests/CSwiftTests/CSwiftTests.swift文件,內容以下:

import XCTest@testable 
import CSwift

class CSwiftTests: XCTestCase {    
    func testExample() {        
    // 測試調用 C 函數        
    let three = c_add(1, 2)        
    XCTAssertEqual(three, 3)        
    // 測試調用 C 語言的符號        
    XCTAssertEqual(C_TEN, 10)
}    
static var allTests : [(String, (CSwiftTests) -> () throws -> Void)] {        
return [
        ("testExample", testExample),
    ]
    }
}

測試

最後一步最簡單,直接執行:

$ swift build
$ swift test

若是沒有問題,那就一切OK了!

其餘

若是您在使用Xcode,則須要使用swift package generate-xcodeproj,可是須要調整上述build.lib.sh內容的編譯目標目錄,並配合Xcode偏好設置選擇匹配的目錄,不然沒法測試。

長按二維碼關注Perfect 官網
微信號:PerfectlySoft (公司名)

Perfect 官網

若是須要幫助,請註冊咱們在Slack上的中文頻道: http://perfect.ly/

相關文章
相關標籤/搜索