Rumah >pembangunan bahagian belakang >C++ >Bagaimana Anda Berinteraksi dengan Kelas C dari Swift?

Bagaimana Anda Berinteraksi dengan Kelas C dari Swift?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 21:58:30588semak imbas

How Do You Interact with C   Classes from Swift?

Berinteraksi dengan Kelas C daripada Swift: Panduan Komprehensif

Antaramuka dengan kod C daripada Swift boleh menjadi penyelesaian yang berharga untuk menggunakan perpustakaan sedia ada dan mengurangkan pertindihan kod. Walau bagaimanapun, ia menimbulkan cabaran khusus apabila berurusan dengan kelas C dan bukannya fungsi. Artikel ini menyediakan panduan terperinci tentang cara membuat instantiate dan memanipulasi kelas C dari dalam Swift.

Merapatkan Pengepala untuk Fungsi C

Sebelum mendalami interaksi kelas C, mari semak proses merapatkan kepada fungsi C:

Tentukan pengepala penyambung dengan fungsi "C" untuk mendedahkan fungsi C kepada 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>

Kod Swift kemudiannya boleh memanggil terus fungsi ini:

<code class="swift">let type = String.fromCString(imageType(filename))
let dump = String.fromCString(hexdump(filename))</code>

Berinteraksi dengan Kelas C daripada Swift

Untuk bekerja dengan kelas C dalam Swift, pendekatannya berbeza sedikit:

Buat C Fungsi Pembungkus

Untuk setiap kelas C, cipta fungsi pembungkus C yang antara muka dengan fungsinya:

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

Tentukan Pengepala Jambatan untuk Fungsi Pembungkus

Sertakan fungsi pembalut dalam pengepala penyambung:

<code class="c">#define ImageReader_hpp

#ifdef __cplusplus
extern "C" {
#endif

    MBR *initialize(char *filename);
    const char *hexdump(MBR *object);

#ifdef __cplusplus
}
#endif</code>

Segera dan Interaksi daripada Swift

Dalam Swift, nyatakan kelas C menggunakan fungsi pembungkus permulaan :

<code class="swift">let cppObject = initialize(filename)</code>

Akses kaedah kelas menggunakan fungsi pembalut:

<code class="swift">let type = String.fromCString(hexdump(cppObject))</code>

Encapsulation for Cleaner Code

Untuk meningkatkan kebolehbacaan kod, rangkumkan merapatkan kod dalam kelas Swift, menghilangkan keperluan untuk interaksi langsung dengan penuding 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>

Abstraksi ini membolehkan anda bekerja dengan objek C seperti objek Swift asli, menyembunyikan mekanisme penyambung yang mendasarinya.

Atas ialah kandungan terperinci Bagaimana Anda Berinteraksi dengan Kelas C dari Swift?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn