Swift menyediakan mekanisme yang berkuasa untuk berinteraksi dengan kod Objective-C, tetapi apabila ia datang ke kelas C, keadaan menjadi lebih kompleks. Artikel ini bertujuan untuk menjelaskan selok-belok membuat instantiating dan memanipulasi kelas C dari dalam Swift, topik yang secara mengejutkan tiada dalam sumber yang diterbitkan.
Tidak seperti Objektif -Kelas C, yang boleh digunakan secara langsung dalam Swift melalui pengepala penyambung, kelas C menimbulkan cabaran yang berbeza. Untuk mengatasinya, kita mesti menggunakan gabungan fungsi C "wrapper" dan kelas Swift sebagai perantara.
Langkah pertama ialah mencipta fungsi C wrapper yang akan antara muka dengan kelas C yang dikehendaki. Fungsi ini menyediakan jambatan antara kod Swift dan kelas C yang mendasarinya, pada asasnya menyediakan antara muka untuk instantiasi objek dan penyeruan kaedah.
Sebagai contoh, untuk kelas C berikut:
<code class="cpp">class MBR { std::string filename; ... };</code>
Kami akan mencipta fungsi pembalut C ini:
<code class="cpp">const void * initialize(char *filename); const char *hexdump(const void *object); ...</code>
Seterusnya, kami mencipta pengepala jambatan yang mengisytiharkan fungsi pembalut C sebagai fungsi C luaran. Ini membolehkan Swift mengakses fungsi ini dan menggunakannya untuk berinteraksi dengan kelas C.
Dari Swift, kini kita boleh menggunakan fungsi pembungkus untuk membuat instantiate dan berinteraksi dengan kelas C:
<code class="swift">let cppObject = UnsafeMutablePointer<Void>(initialize(filename)) let type = String.fromCString(imageType(cppObject)) ...</code>
Walau bagaimanapun, menggunakan UnsafeMutablePointer
<code class="swift">class MBRWrapper { private var cppObject: UnsafeMutablePointer<Void> ... }</code>
Kelas Swift ini menyediakan antara muka yang mudah untuk mengakses kaedah dan atribut objek C, sambil mengendalikan proses penyambungan asas secara telus.
Dengan menggabungkan fungsi pembalut C dan kelas Swift, kami boleh membuat instantiat dan memanipulasi kelas C dengan berkesan dari dalam Swift. Pendekatan ini membolehkan kami memanfaatkan perpustakaan C sedia ada dan merangkum selok-belok merapatkan, menyediakan antara muka yang bersih dan lancar untuk kod Swift berinteraksi dengan objek C.
Atas ialah kandungan terperinci Bagaimanakah Swift boleh berinteraksi dengan kelas C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!