2017-11-27 10 views
0

Swift에서 C/C++/Objective-C 코드를 사용하는 방법에 대한 설명서가 많이 있습니다. Objective-C에서 Swift 사용에 대한 정보도 있습니다.C/C++에서 신속한 라이브러리를 사용 하시겠습니까?

그러나 알고 싶습니다 : C 또는 C++ 코드에서 Swift 라이브러리를 사용할 수 있습니까? 당신이 목표 C에서 신속 기능을 포장 그래서 만약

당신은 목표 C와 목표 C에서 신속 사용할 수 있습니다

답변

1

짧은 답변 : 예, @Josh Homann이 이미 제안한 것처럼 C에서 호출 할 수있는 방식으로 작성된 Objective-C 코드의 Swift 코드를 래핑하여 가능합니다.

그러나, 여기서주의 할 몇 가지 있습니다 : 당신이에서 스위프트를 호출 할 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 
    } 
} 

목표 - 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

는 C의 엄격한 상위 집합은 다음 C.

에서 ObjC를 호출에이 thread를 참조하십시오 C.에서 호출 할 수있다