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!