>  기사  >  백엔드 개발  >  Swift의 C 클래스와 어떻게 상호작용합니까?

Swift의 C 클래스와 어떻게 상호작용합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-03 21:58:30579검색

How Do You Interact with C   Classes from Swift?

Swift의 C 클래스와의 상호 작용: 종합 가이드

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.