Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C/C+中使用swift库+;?_C++_C_Swift_Interop - Fatal编程技术网

C++ 在C/C+中使用swift库+;?

C++ 在C/C+中使用swift库+;?,c++,c,swift,interop,C++,C,Swift,Interop,关于如何在Swift中使用C/C++/Objective-C代码,有大量可用的文档。还有关于在Objective-C中使用Swift的信息 但是,,我想知道:有可能在C或C++代码中使用一个快捷库吗?< > /p> < p>你可以使用目标C的快捷键,而目标C是C的一个严格的超集。所以,如果你把你的Swift函数包在目标C中,你可以从C调用它。C是C的一个严格超集。因此,如果您将swift函数包装在目标C中,那么您可以从C调用它。请参见从C调用ObjC。简短回答:是的,可以通过将swift代码包

关于如何在Swift中使用C/C++/Objective-C代码,有大量可用的文档。还有关于在Objective-C中使用Swift的信息


但是,,我想知道:<强>有可能在C或C++代码中使用一个快捷库吗?< <强> > /p> < p>你可以使用目标C的快捷键,而目标C是C的一个严格的超集。所以,如果你把你的Swift函数包在目标C中,你可以从C调用它。C是C的一个严格超集。因此,如果您将swift函数包装在目标C中,那么您可以从C调用它。请参见从C调用ObjC。简短回答:是的,可以通过将swift代码包装在目标C代码中,这样编写的代码可以从C调用,正如@Josh Homann所建议的那样

然而,这里有一些事情需要注意:

  • 如果要从中调用Swift的C代码是命令行的一部分 实用工具,则在加载Swift库时可能会遇到问题 运行时,请参阅和
  • 不能在C代码中使用特定于Swift的数据类型,因此 Objective-C包装器必须完成所有数据类型转换
话虽如此,这里有一个简单化的小例子,仅用于说明目的。假设我们有一个非常有价值的功能,仅在Swift中可用,我们希望在C中使用它:

@objc public class SwiftClass : NSObject {
    var myInt : Int32 = 111
    @objc public func processInteger(_ anInt : Int32) -> Int32 {
        myInt += anInt
        print("About to return \(myInt) from Swift")
        return myInt
    }
}
.m
文件中的Objective-C包装器可能如下所示:

int32_t processIntegerOC(int32_t i) {
    puts("Entered Objective-C wrapper, about to use Swift...");
    SwiftClass * sc = [[SwiftClass alloc] init];
    return [sc processInteger:i];
}
请注意,此函数可以从C调用,但由于它位于Objective-C文件中,因此可以使用Swift。该函数从C代码调用,就像任何其他C函数一样:

void processIntegerC(int32_t i) {
    puts("Entered processIntegerC(), about to call Objective-C wrapper...");
    int32_t retVal = processIntegerOC(i);
    printf("processIntegerC() has integer %d\n", retVal);   
}

简短回答:是的,可以将Swift代码包装在Objective-C代码中,这样编写的代码可以从C调用,正如@Josh Homann所建议的那样

然而,这里有一些事情需要注意:

  • 如果要从中调用Swift的C代码是命令行的一部分 实用工具,则在加载Swift库时可能会遇到问题 运行时,请参阅和
  • 不能在C代码中使用特定于Swift的数据类型,因此 Objective-C包装器必须完成所有数据类型转换
话虽如此,这里有一个简单化的小例子,仅用于说明目的。假设我们有一个非常有价值的功能,仅在Swift中可用,我们希望在C中使用它:

@objc public class SwiftClass : NSObject {
    var myInt : Int32 = 111
    @objc public func processInteger(_ anInt : Int32) -> Int32 {
        myInt += anInt
        print("About to return \(myInt) from Swift")
        return myInt
    }
}
.m
文件中的Objective-C包装器可能如下所示:

int32_t processIntegerOC(int32_t i) {
    puts("Entered Objective-C wrapper, about to use Swift...");
    SwiftClass * sc = [[SwiftClass alloc] init];
    return [sc processInteger:i];
}
请注意,此函数可以从C调用,但由于它位于Objective-C文件中,因此可以使用Swift。该函数从C代码调用,就像任何其他C函数一样:

void processIntegerC(int32_t i) {
    puts("Entered processIntegerC(), about to call Objective-C wrapper...");
    int32_t retVal = processIntegerOC(i);
    printf("processIntegerC() has integer %d\n", retVal);   
}