在C测试套件中调用Swift代码

时间:2017-03-29 18:45:34

标签: c swift

我目前正在使用Swift中的一个库,该库已经用C语言编写。由于C中的版本已经有一个大型测试套件,我想通过C测试运行Swift代码。

是否可以在C中调用Swift?

1 个答案:

答案 0 :(得分:1)

要从C调用Swift,可以在可从C调用的Objective-C函数中包装Swift代码。下面是一个简单的人为例子。

Swift代码:

import Foundation

@objc public class ClassSwift : NSObject {
    public func addIntegers(int1:Int32, int2:Int32) -> Int32 {
        return int1 + int2;
    }
}

Objective-C包装器:

// Mixed 1a is the name of my sample target
// You can see the name of your Swift header in
// Objective-C Generated Interface Header Name under Build Settings.
#import "Mixed_1a-Swift.h"

// This function is callable from C, even though it calls Swift code!
int addIntsC(int i1, int i2)
{
    ClassSwift * cs = [[ClassSwift alloc] init];
    return [cs addIntegersWithInt1:i1 int2:i2];
}

最后,这是C代码:

#include <stdio.h>

int addIntsC(int, int);

int main(int argc, const char * argv[]) {
    int result = addIntsC(3, 7);
    if (result == 10) puts("Test passed!");
    else puts("Failed... :(");    
    return 0;
}