dan warna ketika membuat sebuah design. • Memahami cara membangun tampilan antarmuka pengguna dengan baik. • Memahami cara membangun pengalam pengguna dengan baik. • Mengerti perbedaan teknik dalam menyusun tampilan aplikasi iOS dengan Android. • Mengetahui tahapan proses dalam membangun rancangan aplikasi iOS.
Swift. • Memahami berbagai tipe dispatch dan threading untuk manajemen thread. • Memahami perbedaan antara serial dan concurrent, serta synchronous dan asynchronous. • Memahami cara terbaru untuk menangani proses dengan async/await. iOS Developer
Setiap proses memiliki minimal 1 thread. Di iOS, proses utama ketika aplikasi dijalankan disebut main thread. Di sinilah semua proses yang berhubungan dengan UI dibuat dan diatur. iOS Developer
manajemen thread tanpa perlu membuat thread secara manual. Pada dasarnya dispatch itu adalah antrian yang di dalamnya terdapat tugas-tugas yang harus dikerjakan. iOS Developer
bisa langsung digunakan. • Global queues: dieksekusi secara concurrent dan bisa langsung digunakan. • Private queues: dieksekusi secara serial atau concurrent. Developer harus membuatnya terlebih dahulu. iOS Developer
perlu menunggu tugas pertama selesai untuk memulai tugas berikutnya. Dengan Concurrent Queue, sistem dapat membuat multiple threads untuk menyelesaikan tugas yang ada. iOS Developer
Dengan menggunakan sync maka thread pemanggil akan menunggu tugas-tugas yang ada di dalam antrian selesai dieksekusi baik secara serial ataupun concurrent. iOS Developer
mengembalikan kontrol ke thread pemanggil setelah task dimasukkan ke dalam antrian tanpa perlu menunggu sampai selesai. Metode asinkron tidak akan melakukan blocking di thread pemanggil. iOS Developer
{ let queue = DispatchQueue( label: "com.dicoding.completionblock" ) queue.async { print("Processing: \(data)") sleep(2) // Imitate expensive task completion("Processing \(data) finished") } } let mainQueue = DispatchQueue( label: "com.dicoding.main", qos: .userInteractive ) mainQueue.async { expensiveTask(data: "Get User") { result in print(result) } print("Main Queue Run") } Completion Block (callback) Sebuah kode di mana Anda memakainya untuk menghubungkan satu thread ke thread lainnya (thread dependency). Completion Block sendiri sebenarnya adalah sebuah Closure, yang artinya Anda harus mengirimkan sebuah fungsi (function) sebagai parameter. iOS Developer
var delegate: TaskDelegate? func expensiveTask(data: String) { let queue = DispatchQueue( label: "com.dicoding.completionblock" ) queue.async { print("Processing: \(data)") sleep(2) // Imitate expensive task self.delegate?.taskFinished( result: "Processing \(data) finished" ) } } } Delegation Sebuah pola di mana sebuah object dapat berinteraksi dengan object lain dengan menggunakan protocol. Dalam bahasa pemrograman lain protocol ini mempunyai fungsi yang hampir mirip dengan interface. iOS Developer
DispatchQueue( label: "com.dicoding.main", qos: .userInteractive ) mainQueue.async { var task = Task() task.delegate = self task.expensiveTask(data: "Get User") print("Main Queue Run") } } func taskFinished(result: String) { // Delegation print(result) } } let main = Main() main.run() Delegation Sebuah pola di mana sebuah object dapat berinteraksi dengan object lain dengan menggunakan protocol. Dalam bahasa pemrograman lain protocol ini mempunyai fungsi yang hampir mirip dengan interface. iOS Developer
loadWebResource("dataprofile.txt") { dataResource in loadWebResource("imagedata.dat") { imageResource in decodeImage(dataResource, imageResource) { imageTmp in dewarpAndCleanupImage(imageTmp) { imageResult in completionBlock(imageResult) } } } } } processImageData1 { image in display(image) } Background Banyak proses asynchronous menggunakan closure dan completion handler. Namun, penggunaannya sangatlah sulit dan rumit sehingga sering bermasalah, terutama ketika terlalu banyak asynchronous operation, error handling, atau control flow antara proses asynchronous. iOS Developer
(suspended) ketika runtime. Berbeda dengan synchronous function karena ketika function dipanggil, ia akan menjalankan completion, mengembalikan sebuah error, atau tidak mengembalikan apa pun. iOS Developer
Void) { let movies = // Proses async untuk mendapatkan data movies dari API. completionBlock(movies) } func downloadPhoto(url: String, completionBlock: (_ poster: UIImage) -> Void) { let poster = // Proses async untuk mendapatkan poster dari API. completionBlock(poster) } Delegation
Void) { let movies = // Proses async untuk mendapatkan data movies dari API. completionBlock(movies) } func downloadPhoto(url: String, completionBlock: (_ poster: UIImage) -> Void) { let poster = // Proses async untuk mendapatkan poster dari API. completionBlock(poster) } Delegation func getMovies() async -> [MovieModel]) { let movies = // Proses async untuk mendapatkan data movies dari API. return movies } func downloadPhoto(url: String) async -> UIImage) { let poster = // Proses async untuk mendapatkan poster dari API. return poster } Async Await
• Publisher : sumber atau sesuatu yang menghasilkan nilai. • Operator : sesuatu yang dapat bekerja dengan nilai tersebut. • Subscriber : sesuatu yang peduli dengan nilai-nilai tersebut. iOS Developer
mencegah blocking proses di thread utama. Dengan menggunakan dispatch queue, async/await, dan operation, kinerja aplikasi dapat ditingkatkan untuk pengalaman pengguna yang lebih baik. Teruslah eksplorasi dan praktikkan konsep ini dalam pengembangan aplikasi Anda!