Panduan Langkah Demi Langkah untuk Mengonversi Aplikasi Objective-C Lengkap ke Swift

Diterbitkan: 2018-03-14

Sejak dirilis kembali pada tahun 2014, bahasa pemrograman Apple Swift telah mengalami pertumbuhan yang fenomenal. Bahasa pemrograman telah berhasil membuat tempatnya dalam tugas 10 bahasa Pemrograman Teratas , berbagi posisi dengan pendahulunya, Objective-C. Namun perang swift vs objektif-C tidak pernah mereda.

Dengan peningkatan popularitas dan fitur menarik ini, banyak pengembang aplikasi iOS yang sebelumnya bekerja dengan Obj-C telah beralih ke bahasa pemrograman Swift. Faktanya, Dalam pertarungan Swift atau Objective-C untuk iOS, Berbagai aplikasi iOS seperti LinkedIn, Yahoo Weather, Hipmunk, dan Lyft telah ditingkatkan dari Objective-C ke Swift, sementara banyak yang berencana untuk mengonversi aplikasi Objective-C ke Swift.

FAKTOR-FAKTOR YANG MEMBUAT SWIFT PILIHAN YANG LEBIH BAIK

Secara pribadi, saya telah melihat evolusi Swift sejak versi pertamanya diluncurkan dan saya dapat mengatakan bahwa antara Swift vs C, Swift menggantikan Objective-C berdasarkan faktor-faktor, seperti

Sumber Terbuka

Swift adalah bahasa sumber terbuka dan kode Swift dapat dibawa-bawa di lebih banyak platform daripada Objective-C yang pernah ada.

Kecepatan

Pengembangan Swift untuk iOS adalah bahasa bertipe statis yang bekerja dengan kompiler LLVM dan dapat menggunakan kembali kode yang ada, menghapus sumber daya yang tidak digunakan, mengelola fungsi sebaris, dan sebagainya. Selain itu, cara kerjanya didasarkan pada salah satu aritmatika perhitungan algoritma tercepat C++ yang pada gilirannya membuktikan bahwa ia memiliki keunggulan kompetitif dibandingkan pendahulunya.

Menurut apa yang Apple klaim dan saya alami, algoritma pencarian Swift 2,6 kali lebih cepat dari Objective-C.

Keterbacaan

Tidak seperti Objective-C, Swift tidak terikat dengan fondasi C. Ini memberdayakan pengembang iOS untuk menghapus panggilan metode bersarang, melewatkan titik koma di akhir baris, menghindari menempatkan @ di awal kata kunci, menggabungkan string menggunakan tanda "+", dan seterusnya. Selanjutnya, kelas Swift tidak dibagi menjadi bagian, antarmuka dan implementasi. Ini mengurangi panjang kode menjadi hampir setengahnya, membuatnya lebih mudah dibaca.

Misalnya, ketika aplikasi Lyft ditulis ulang dalam bahasa Swift dari awal, kode aplikasi berkurang dari 75.000 menjadi 25.000 baris. Angka-angka yang mengesankan ini memotong upaya para pengembang tanpa mempengaruhi kinerja aplikasi di ujung pelanggan.

Pengodean Interaktif

Dengan fitur Playgrounds, memungkinkan programmer menulis sepotong kode atau algoritme sambil mengumpulkan umpan balik di sepanjang fase pengembangan. Karena kode Swift ditulis menggunakan visualisasi data, ini membuat proses pengembangan aplikasi lebih mudah dan mudah didekati.

Keamanan

Swift adalah bahasa yang lebih aman dan lebih aman untuk membangun aplikasi sesuai tren pasar saat ini. Sintaks dan konstruksi bahasanya telah mengecualikan jenis kesalahan yang biasa diamati saat mengkode dalam bahasa Objective-C. Ini menyiratkan ada kemungkinan lebih kecil dari aplikasi crash dan kasus perilaku bermasalah.

Tidak seperti dalam kasus Objective-C, kode yang ditulis dalam Swift dapat dikompilasi dan kesalahan dapat diperbaiki, bersama dengan bagian penulisan kode. Oleh karena itu, Swift bertindak lebih baik dan lebih cepat dalam proses pengujian, jika dibandingkan dengan proses pengujian kode Objective-C.

Pemeliharaan

Karena Swift tidak memiliki ketergantungan pada C seperti pendahulunya, pemeliharaan dalam hal pengembangan aplikasi Swift jauh lebih mudah. Sesuatu yang membuat Swift menjadi masa depan pengembangan aplikasi iOS .

Dalam hal membangun aplikasi iOS menggunakan Objective-C, pengembang seharusnya memelihara dua file kode yang berbeda untuk meningkatkan waktu pembuatan dan efisiensi kode. Namun, Swift menjatuhkan mekanisme dua file ini, menggabungkan header Objective-C (.h) dan file implementasi (.m) menjadi satu file (.swift). Kompiler LLVM secara otomatis menemukan dependensi saat membaca file Swift, yang merupakan manfaat besar bagi pengembang aplikasi iOS.

Terlepas dari faktor-faktor yang disebutkan di atas, manfaat yang layak disebutkan dari memilih Swift daripada bahasa pemrograman Apple lainnya adalah kompatibilitasnya dengan Objective-C. Apple telah menawarkan pengembang aplikasi fasilitas untuk menggunakan kedua bahasa dalam proyek yang sama. Ini tidak hanya membantu dalam hal mengembangkan aplikasi iOS menggunakan Swift dari awal, tetapi juga dalam meningkatkan aplikasi mereka yang ada ke Swift menggunakan kode Objective-C.

Sementara Anda sekarang akrab dengan perbedaan filosofis antara dua bahasa pengembangan aplikasi iOS, mari beralih ke perbedaan saat implementasi praktis.

SWIFT VS OBJECTIVE-C: PERBEDAAN UTAMA ANTARA TITANS PENGEMBANGAN IOS

Dengan pengalaman saya dengan basis kode Objective-C yang kompleks dan basis kode Swift, Anda akan menemukan beberapa peningkatan pada konsep yang ada bersama dengan pengenalan berbagai elemen baru yang membuat proses pengembangan aplikasi menjadi cepat. Tanpa basa-basi, mari kita lihat semua yang akan Anda temukan baru/berbeda dalam perang swift vs objektif c.

Opsional

Ketika kita berbicara tentang kinerja Swift vs Objective-C, kita dapat memanggil metode pada objek nil untuk mendapatkan nilai nol di Obj-C. Kami harus melakukan pemeriksaan nil secara manual untuk memahami perilaku yang tidak ditentukan jika terjadi nilai nihil yang tidak terduga. Namun, masalah ini dapat diselesaikan dengan menggunakan Opsional, sebuah konsep baru yang diperkenalkan dalam kode Swift. Opsional memungkinkan fungsi yang mungkin tidak dapat mengembalikan nilai yang berarti untuk mengembalikan nilai yang dienkapsulasi dalam opsional atau nihil.

Sintaks untuk mendeklarasikan tipe Opsional adalah:

Enum publik Opsional<Wrapped> :_Reflectable, NilLiteralConvertible

Secara praktis, itu dapat memiliki nilai tipe Dibungkus atau nilai yang tidak ada.

Swift merender gula sintaksis untuk mendeklarasikan tipe opsional, sehingga kita dapat mengganti Optional<String> dengan String?

Ada dua cara utama untuk mendapatkan nilai yang dibungkus dari wadah opsional:

Opsional Chaining: Digunakan dalam kasus di mana pernyataan kondisional if-let akan menerima nilai hanya jika ada.
Pembungkusan Paksa: Digunakan ketika variabel opsional yang dideklarasikan tidak nol. Jika nilainya ada, itu akan memberikan output tanpa menerapkan kondisi. Tapi, dalam kasus lain, itu akan crash.
Kami juga dapat menemukan opsi yang tidak terbungkus secara implisit dalam bahasa Swift, dideklarasikan sebagai String!

Sebagai contoh:

Kelas XKelas

{

var aString: String

var bString: String!

var cString: String?

Init (string: String)

{

aString = string

}

}

Di Sini,

Sebuah String tidak pernah bisa nol. Sangat penting bahwa variabel ini memiliki nilai selama inisialisasi objek, jika tidak program akan menyebabkan crash.
String B bisa nihil. Namun, jika Anda mencoba mengakses objek nil, program akan macet.
C String bisa nil dan seharusnya diperlakukan sebagai variabel opsional biasa.
Ekstensi
Ekstensi dan kategori yang ditemukan di Obj-C dikonsolidasikan menjadi satu entitas, ekstensi dalam bahasa Swift. Ekstensi menambahkan fungsionalitas baru ke kelas, enumerasi, struktur, atau protokol yang sudah ada, dan bagian terbaiknya adalah Anda tidak perlu memiliki akses ke kode sumber asli untuk memperluas jenis.

Tuple
Selain Opsional, tipe data baru lainnya yang diperkenalkan dalam bahasa pengembangan baru Apple adalah Tuples. Tuple (sebagai pengganti tipe data yang ditentukan pengguna) pada dasarnya dianggap mengelompokkan banyak nilai ke dalam satu grup gabungan. Ini adalah elemen yang tepat untuk dipertimbangkan jika menurut Anda membuat model di suatu tempat mungkin berlebihan dan kamus tidak cukup ramah pembaca. Untuk mengetahui lebih banyak Tuples, lihat blog ini .

Obat generik
Generik adalah salah satu fitur yang paling mencolok dari bahasa pemrograman Swift, dan pada kenyataannya, banyak perpustakaan standar Swift dibuat dengan kode Swift. Kode Generik memungkinkan pengembang menulis fungsi dan tipe yang fleksibel dan dapat digunakan kembali yang dapat bekerja dengan kumpulan tipe yang berbeda, sesuai dengan persyaratan yang ditentukan. Ini meminimalkan risiko duplikasi dan meningkatkan keterbacaan kode dengan pendekatan yang jelas dan abstrak.

Menurut pengalaman saya, Generik sulit didapat pada awalnya, sama seperti rekursi. Tetapi, ketika Anda mendapatkannya, Anda akan dapat melepaskan dunia baru untuk memperbaiki masalah logis yang melelahkan.

Pencacahan
Dalam kode Objective-C, enumerasi dibatasi untuk tipe primitif. Untuk memetakan nilai enumerasi integer ke string untuk menampilkan output, Anda harus memasukkan array atau beralih ke struktur kontrol sakelar. Namun, Anda tidak perlu melalui kerepotan ini dengan bahasa pengembangan aplikasi Swift iOS.

Swift menawarkan beragam enumerasi baru dengan lebih banyak opsi. Enumerasi Swift dapat memiliki nilai terkait dan kasus enumerasi Swift dapat menampung kumpulan bidang yang telah ditentukan sebelumnya. Faktanya, enumerasi Swift dapat bersifat rekursif dan dapat menyimpan nilai mentah.

Sebagai contoh:
kode

Subskrip
Subscript dapat dilihat sebagai media untuk mengakses informasi dari urutan, koleksi atau daftar di kelas, enumerasi dan struktur tanpa menggunakan metode. Anda dapat mempertimbangkan subskrip untuk menetapkan dan mengambil nilai berdasarkan indeks tanpa membuat metode terpisah untuk menyimpan dan mengambil. Misalnya, Anda dapat mengakses elemen dalam instance Array sebagai someArray[index] dan elemen dalam instance Dictionary sebagai someDictionary[key].

Sintaks untuk mendeklarasikan Subscript adalah sebagai berikut:

subskrip (indeks: Int) -> Int {

Dapatkan {

//untuk mendeklarasikan nilai subscript

}

set (nilai baru) {

//untuk mendefinisikan nilai

}

}

Ketik Inferensi

Swift juga mengusulkan keamanan tipe untuk pengembangan aplikasi iOS, yang menurutnya variabel ketika dideklarasikan dengan tipe tertentu, tipenya akan statis dan tidak dapat diubah. Kompilator akan menentukan (atau menyimpulkan) jenis variabel Anda berdasarkan nilai yang Anda tetapkan.

Sebagai contoh:

kode 1
Di sini, kompiler akan menampilkan kesalahan saat Anda mencoba menginisialisasi dengan nilai numerik ke variabel str2 (lihat di bawah)

kode 03

Fungsi
Sintaks Fungsi dalam bahasa pemrograman Swift lebih fleksibel untuk didefinisikan daripada dalam gaya kode Objective-C yang kompleks. Di Swift, setiap fungsi memiliki tipe yang terdiri dari tipe parameter fungsi dan tipe pengembalian, yang berarti Anda dapat menetapkan fungsi ke variabel atau meneruskannya sebagai nilai ke fungsi lain (seperti yang ditunjukkan pada contoh di bawah):

gambar kode

Selain itu, Swift juga membiarkan pengembang aplikasi menentukan nilai default ke parameter fungsional.

Penanganan Kesalahan
Swift menawarkan pendekatan yang sama sekali baru untuk melempar, menangkap, mengedarkan, dan memanipulasi kesalahan yang dapat dipulihkan saat runtime. Untuk melihat sekilas penanganan kesalahan di Swift, lihat blog.

Terlepas dari ini, berbagai konsep yang membuat pengembangan aplikasi Swift menjadi win-win atas pengembangan aplikasi Objective-C adalah:

model
Dalam kasus Swift, model lebih disukai sebagai struct daripada kelas.

Protokol
Dalam video pertama Apple WWDC, swift diperkenalkan sebagai "bahasa berorientasi protokol". Protokol dapat didefinisikan sebagai cetak biru metode, properti, dan entitas lain yang sesuai dengan tugas/fungsi tertentu. Mereka dapat dianut oleh kelas, enumerasi atau struktur untuk memfasilitasi implementasi aktual dari persyaratan tersebut, dan jauh lebih kuat dibandingkan dengan Obj C dengan fitur menyediakan implementasi default, menggabungkan generik, dll.

Sebagai pengembang aplikasi iOS, saya lebih suka membuat protokol sebelum mendefinisikan kelas sebagai praktik paling efektif untuk memanfaatkan manfaat bahasa pemrograman Apple tingkat lanjut.

Pendekatan Pemrograman Fungsional
Swift memberdayakan pengembang untuk menggunakan lebih banyak pendekatan fungsional untuk memecahkan masalah biasa daripada menggunakan loop tradisional atau tipe referensi. Di sini, perspektifnya adalah menganalisis masalah dalam hal apa solusinya, alih-alih menentukan bagaimana mendapatkan solusi seperti yang dilakukan dalam pendekatan tradisional.

Dari pengalaman saya dengan kedua bahasa iOS, satu hal yang saya perhatikan adalah bahwa apa yang kami lakukan dengan iterasi menggunakan for loop di Objective-C dapat dilakukan dengan menggunakan konsep Filter, Map, dan Reduce di Swift. Untuk mendapatkan informasi mendalam tentang fungsi tingkat tinggi ini dalam pemrograman Fungsional, lihat blog.

PANDUAN LANGKAH DEMI LANGKAH UNTUK MENGUBAH APLIKASI OBJECTIVE-C LENGKAP MENJADI SWIFT

Saat ini, ada berbagai alat untuk mengonversi aplikasi dari Objective-C ke Swift baris demi baris. Namun, saya menyarankan untuk tidak menggunakan apa pun. Meskipun kedua bahasa iOS dapat dioperasikan, paradigma program mereka berbeda. Memigrasikan aplikasi dari Obj-C ke Swift secara langsung akan membawa risiko yang lebih tinggi untuk menggunakan paradigma yang salah. Biarkan saya menguraikan ini.

Swift, tidak seperti pendahulunya, dipengaruhi oleh paradigma pemrograman fungsional, yang membuatnya sangat bergantung pada kekekalan. Misalnya, jika Anda berbicara tentang array dan kamus – model dasar ini digunakan untuk menjadi tipe referensi di Objective-C, tetapi mereka adalah tipe nilai di Swift, sehingga tidak dapat diubah. Ini menyiratkan bahwa mengonversi kode Obj-C ke Swift secara tidak sadar menggunakan alat apa pun akan membuat Anda menghadapi banyak kesalahan yang sulit untuk di-debug. Selain itu, Swift memiliki banyak fitur baru (seperti yang telah dijelaskan di atas) yang mengubah algoritme/pendekatan lebih efisien dan memprogram dengan cepat! Faktanya, itu adalah alasan utama mengapa Apple meluncurkan bahasa baru daripada memutakhirkan Obj-C. Dengan mempertimbangkan semua poin ini, saya sangat menyarankan semua untuk menulis aplikasi baru di Swift dari awal daripada melakukan konversi baris demi baris dari Obj-C ke Swift.

Namun, jika Anda ingin mengonversi aplikasi Objective-C lengkap ke Swift, satu alat yang dapat Anda gunakan adalah Swiftify. Alat ini memudahkan proses peningkatan kode Obj-C ke bahasa pemrograman baru Apple dalam satu klik; menghemat ribuan jam kerja. Fitur interoperabilitas memungkinkan untuk mengintegrasikan kode iOS yang dikonversi kembali ke Objective-C tanpa kerumitan, yang berarti Anda dapat menjelajahi berbagai opsi yang ditawarkan Swift dan kemudian, mengintegrasikannya kembali ke proyek Obj-C Anda tanpa menulis ulang semuanya sekaligus.

Siapkan kode aplikasi Anda yang ada untuk Konversi
Itu selalu lebih baik, untuk memulai dengan kode Obj-C terbaru. Ini karena Xcode menyediakan konverter Objective-C modern yang dapat membantu Anda dengan:

1. Mengubah id menjadi instancetype jika memungkinkan
2. Menggunakan makro enum yang benar
3. Meningkatkan ke sintaks @property yang lebih baru

Sementara konverter membantu dengan mekanisme menganalisis dan menerapkan perubahan potensial, itu tidak menggambarkan semantik kode. Jadi, disarankan untuk semua pengembang aplikasi iOS untuk meninjau semuanya secara manual sekali dan kemudian mengkonfirmasi perubahannya.

Untuk menggunakan konverter, pilih Edit -> Refactor -> Ubah ke sintaks Modern Objective-C.

Proses Migrasi kode Objective-C ke Swift
Pendekatan paling efektif untuk mengonversi aplikasi Objective-C lengkap ke Swift adalah, untuk memulai, satu kelas pada satu waktu, terutama kelas tanpa subkelas karena Anda tidak dapat mensubkelaskan kelas Swift di Obj-C.

Ganti file .m dan .h yang terkait dengan kelas dengan satu file .swift. Dengan ini, semuanya mulai dari antarmuka hingga implementasi akan secara otomatis masuk ke file Swift. Selain itu, Anda tidak perlu membuat file header karena Xcode secara otomatis membuat header, jika diperlukan.

Mendesain File Header Bridging
Saat Anda menambahkan file .swift pertama Anda, Anda akan menemukan prompt seperti yang ditunjukkan di bawah ini.

kode cepat12

Klik pada opsi ' Buat Bridging Header '.

Panduan Langkah-demi-Langkah

1. Pilih sepasang file .h dan .m yang ingin Anda ubah menjadi Swift. Jika Anda ingin mengonversi seluruh proyek, tinggalkan kelas AppDelegate untuk nanti.
2. Cari #import “MyViewController.h” di seluruh kode dan hapus dari File Header Objective-C Bridging ([MyProject]-Bridging-Header.h).
3. Ganti instance #import “[filename].h” dengan #import “[MyProject]-Swift.h” di semua file .m dan masukkan @class [filename] alih-alih #import “[filename].h” di semua file .h.
4. Ubah bagian file Obj-C menjadi Swift. Ini dapat dengan mudah dilakukan dengan menggunakan ekstensi Finder dari 'Swiftify for Xcode'. Jika tidak, salin konten file .m dan .h ke .swift dan gunakan opsi "Konversi File ke Swift" yang tersedia di Ekstensi Swiftify Xcode.
5. Ganti file .h dan .m dengan file .swift yang dikonversi dalam proyek.
6. Kompilasi proyek dan perbaiki kesalahan konversi. Meskipun banyak masalah akan dengan mudah dikelola menggunakan saran perbaikan otomatis Xcode, Anda juga dapat mengandalkan Swiftify untuk melaporkan dan memperbaiki kesalahan yang muncul beberapa kali dalam proyek.
7. Setelah selesai, bangun dan jalankan proyek. Jika muncul masalah 'Kelas tidak Ditemukan' diikuti dengan mogok, temukan semua referensinya di Editor Papan Cerita. Masukkan kembali nama kelas di Identity Inspector, simpan dan coba lagi.
8. Jika Anda mengonversi seluruh proyek, Anda dapat mengubah kelas AppDelegate sekarang. Pada titik ini, semua file lain telah dikonversi ke Swift dan jadi, jika tidak ada file Obj-C yang tersisa di target, Anda dapat dengan mudah menghapus file main.m dan .pch (header yang telah dikompilasi).

Praktik mana yang Anda sukai – buat aplikasi iOS baru di Swift dari awal atau konversi Objective-C ke Swift sepenuhnya? Bagikan pandangan Anda melalui bagian komentar di bawah.