2017-11-27 23 views
0

SwiftでC/C++/Objective-Cコードを使用する方法については、豊富なドキュメントがあります。 Objective-CでSwiftを使用する方法についての情報もあります。C/C++でswiftライブラリを使用しますか?

しかし、私は知りたいと思います:CまたはC++コードでSwiftライブラリを使用することは可能ですか?

答えて

1

短い答え:@Josh Homannによって既に提案されているように、SwiftコードをCから呼び出し可能な方法で記述された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]; 
} 
:次のようになります、 .mファイルで、

@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 
    } 
} 

のObjective-Cラッパー:我々は、我々はCでの使用を作りたいということだけスウィフトで利用できるこの貴重な機能を、持っているとしましょう

この関数は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); 
} 
1

あなたはObjective Cの中であなたの迅速な機能をラップするのであれば、あなたはC.

からにObjCを呼び出すには、この threadを参照してくださいC.から呼び出すことができますが、Objective Cのから迅速に使用することができるとObjective CはCの完全なスーパーセットであります
関連する問題