Swift의 C 코드와의 상호 작용은 기존 라이브러리를 활용하고 코드 중복을 줄이는 데 유용한 솔루션이 될 수 있습니다. 그러나 함수보다는 C 클래스를 다룰 때 특정한 문제가 발생합니다. 이 글은 Swift 내에서 C 클래스를 인스턴스화하고 조작하는 방법에 대한 자세한 가이드를 제공합니다.
C 함수용 브리징 헤더
C 클래스 상호 작용을 살펴보기 전에 먼저 검토해 보겠습니다. C 함수에 대한 브리징 프로세스:
"C" 함수로 브리징 헤더를 정의하여 C 기능을 Swift에 노출합니다.
<code class="c">#define ImageReader_hpp #ifdef __cplusplus extern "C" { #endif const char *hexdump(char *filename); const char *imageType(char *filename); #ifdef __cplusplus } #endif</code>
Swift 코드는 다음 함수를 직접 호출할 수 있습니다.
<code class="swift">let type = String.fromCString(imageType(filename)) let dump = String.fromCString(hexdump(filename))</code>
Swift에서 C 클래스와 상호 작용
Swift에서 C 클래스를 사용하려면 접근 방식이 약간 다릅니다.
C 만들기 래퍼 함수
각 C 클래스에 대해 해당 기능과 인터페이스하는 C 래퍼 함수를 만듭니다.
<code class="c++">MBR *initialize(char *filename) { return new MBR(filename); } const char *hexdump(MBR *object) { static char retval[2048]; strcpy(retval, object->hexdump()); return retval; }</code>
래퍼 함수에 대한 브리지 헤더 정의
브리징 헤더에 래퍼 함수 포함:
<code class="c">#define ImageReader_hpp #ifdef __cplusplus extern "C" { #endif MBR *initialize(char *filename); const char *hexdump(MBR *object); #ifdef __cplusplus } #endif</code>
Swift에서 인스턴스화 및 상호 작용
Swift에서 초기화 래퍼 함수를 사용하여 C 클래스를 인스턴스화합니다. :
<code class="swift">let cppObject = initialize(filename)</code>
래퍼 함수를 사용하여 클래스 메서드에 액세스:
<code class="swift">let type = String.fromCString(hexdump(cppObject))</code>
클리너 코드를 위한 캡슐화
코드 가독성을 높이려면 Swift 클래스에서 코드를 브리징하여 C 포인터와의 직접적인 상호 작용이 필요하지 않게 합니다.
<code class="swift">class MBRWrapper { private var _object: MBR * init(filename: String) { _object = initialize(filename) } func hexdump() -> String { return String.fromCString(hexdump(_object)) } }</code>
이 추상화를 사용하면 기본 브리징 메커니즘을 숨기고 기본 Swift 객체처럼 C 객체로 작업할 수 있습니다.
위 내용은 Swift의 C 클래스와 어떻게 상호작용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!