Objektif:
Artikel ini menyediakan penyelesaian terperinci kepada cabaran berinteraksi dengan kelas C dari dalam Swift, membolehkan pembangun memanfaatkan perpustakaan C sedia ada dengan lancar dalam Swift mereka aplikasi.
Merapatkan Fungsi C dalam Swift
Menyepadukan fungsi C ke dalam Swift adalah mudah. Dengan mentakrifkan pengepala penyambung dalam C dan memanggil fungsi terus daripada Swift, seperti yang ditunjukkan dalam coretan kod yang disediakan, anda boleh merapatkan jurang kebolehoperasian dengan mudah.
Menginstantiasikan dan Memanipulasi Kelas C dalam Swift
Cabaran sebenar terletak pada membuat seketika dan memanipulasi kelas C dalam Swift. Untuk menangani ini, kami mencipta fungsi pembalut C yang antara muka dengan kelas C. Fungsi pembungkus ini boleh membuat seketika objek dan mengembalikan penunjuk kepada mereka.
Kajian Kes: Berinteraksi dengan Kelas MBR dalam Swift
Sebagai contoh, pertimbangkan kelas C MBR berikut :
<code class="cpp">class MBR { std::string filename; public: MBR(std::string filename); const char *hexdump(); const char *imageType(); const char *bootCode(); const char *partitions(); private: bool readFile(unsigned char *buffer, const unsigned int length); };</code>
Untuk berinteraksi dengan kelas ini dalam Swift, kami mentakrifkan pembungkus C berikut fungsi:
<code class="cpp">const void *initialize(char *filename) { MBR *mbr = new MBR(filename); return (void *)mbr; } const char *hexdump(const void *object) { MBR *mbr; static char retval[2048]; mbr = (MBR *)object; strcpy(retval, mbr->hexdump()); return retval; } const char *imageType(const void *object) { MBR *mbr; static char retval[256]; mbr = (MBR *)object; strcpy(retval, mbr->imageType()); return retval; }</code>
Antara Muka Swift
Dengan adanya fungsi pembungkus ini, kita boleh mencipta kelas Swift untuk merangkum interaksi dengan kelas C MBR:
<code class="swift">class MBRSwift { private var cppObject: UnsafeMutablePointer<Void>! init(filename: String) { cppObject = UnsafeMutablePointer<Void>(initialize(filename)) } var imageType: String { return String(cString: imageType(cppObject)) } var hexdump: String { return String(cString: hexdump(cppObject)) } }</code>
Penggunaan dalam Swift
Menggunakan kelas Swift ini, kita boleh membuat instantiate dan memanipulasi kelas C MBR dengan lancar:
<code class="swift">let mbr = MBRSwift(filename: "filename.mbr") print(mbr.imageType) print(mbr.hexdump)</code>
Meningkatkan Penyelesaian: Mengabstraksi Jambatan C
Untuk memperhalusi lagi penyelesaian ini, kami boleh mencipta kelas Swift yang merangkum jambatan C sepenuhnya. Dengan berbuat demikian, kami mencapai antara muka yang lebih bersih dan lebih intuitif untuk berinteraksi dengan kelas C.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berinteraksi dengan Kelas C dari Swift untuk Penyepaduan Lancar dan Penggunaan Semula Kod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!