Repositori ini dibuat untuk tujuan demonstrasi daripada untuk konsumsi. Namun, mengingat umpan balik dan penggunaan repositori ini, saya akan mulai mempertahankannya di sini dan priortisasi memperbaiki/menerapkan masalah yang diangkat.
MVVM ? Mengapa MVC tidak merekomendasikan Apple? Android Apakah MVP Hebat Benar? Bagaimana dengan pola Viper yang keren? Saya percaya upaya besar telah dilakukan untuk menjelaskan apa yang dibawa setiap pola ke meja dan idenya di sini bukan untuk menambah debat tetapi hanya membangun di atas pendapat yang telah saya terbentuk: MVVM adalah cara yang harus ditempuh.
Sebagai primer cepat untuk apa MVVM, ini adalah pola desain di mana viewmodel memediasi antara data yang menyediakan model dan tampilan yang menampilkan data yang disediakan seperti yang ditunjukkan di bawah ini:

Di iOS, tampilan pada dasarnya adalah ViewController dan ViewModel adalah objek (struktur) yang menyediakan data yang tepat untuk diterjemahkan.
Ini memberikan arsitektur yang digabungkan secara longgar yang dapat dipelihara (pengontrol tampilan yang sangat tipis) dan dapat diuji (viewmodel abstrak dari UI dan karenanya mudah diuji)
Masih ada peringatan: MVVM klasik memungkinkan prinsip tanggung jawab tunggal dengan mudah (dan indah) jika model sebagai model domain. Namun, dalam kasus model anemia (yang umumnya terjadi ketika Anda memiliki API REST yang ditulis dengan baik), orang juga membutuhkan mediator atau presenter lain yang memfasilitasi data dan aliran navigasi.
Sekarang, View Model memiliki tanggung jawab untuk memperbarui tampilan serta mendapatkan pembaruan dari tampilan mengenai perubahan yang dilakukan oleh pengguna. Ini dapat dicapai dengan kode minimum menggunakan pengikatan data dua arah. Tapi ... iOS tidak memiliki mekanisme ikatan dua arah yang tersedia di luar kotak!
Untungnya kami memiliki perpustakaan reaktif seperti RXSwift, RXCOCOA tetapi mereka terlalu berat mengingat ikatan dua arah adalah bagian yang sangat kecil dari paradigma pemrograman reaktif. Simpletwowaybinding berusaha untuk menyediakan hanya mengikat dua arah, dengan cara sederhana yang sederhana!
Untuk menjalankan proyek contoh, klon repo, dan menjalankan pod install dari direktori contoh terlebih dahulu.
import SimpleTwoWayBinding
struct FormViewModel {
let name : Observable < String > = Observable ( )
let companyName : Observable < String > = Observable ( )
let yearsOfExperience : Observable < Double > = Observable ( )
let isCurrentEmployer : Observable < Bool > = Observable ( false )
let approxSalary : Observable < Float > = Observable ( )
let comments : Observable < String > = Observable ( )
}Properti yang Anda inginkan "terikat" ke tampilan harus dinyatakan sebagai diamati.
class ViewController : UIViewController {
@ IBOutlet weak var nameField : UITextField !
@ IBOutlet weak var companyField : UITextField !
@ IBOutlet weak var isCurrentEmployerSwitch : UISwitch !
@ IBOutlet weak var yearsOfExperienceStepper : UIStepper !
@ IBOutlet weak var salaryRangeSlider : UISlider !
@ IBOutlet weak var selectedSalaryRangeLabel : UILabel !
@ IBOutlet weak var selectedYearsOfExperienceLabel : UILabel !
var viewModel : FormViewModel !
override func viewWillAppear ( _ animated : Bool ) {
super . viewWillAppear ( animated )
self . navigationItem . title = " Survey Form "
setupBindings ( )
}
func setupBindings ( ) {
nameField . bind ( with : viewModel . name )
companyField . bind ( with : viewModel . companyName )
isCurrentEmployerSwitch . bind ( with : viewModel . isCurrentEmployer )
yearsOfExperienceStepper . bind ( with : viewModel . yearsOfExperience )
salaryRangeSlider . bind ( with : viewModel . approxSalary )
selectedSalaryRangeLabel . observe ( for : viewModel . approxSalary ) {
[ unowned self ] ( _ ) in
self . selectedSalaryRangeLabel . text =
self . viewModel . getSalaryString ( )
}
selectedYearsOfExperienceLabel . observe ( for : viewModel . yearsOfExperience ) {
[ unowned self ] ( _ ) in
self . selectedYearsOfExperienceLabel . text =
self . viewModel . getExperienceString ( )
}
}
} Metode bind pada uicontrol mengatur ikatan dua arah dengan yang dapat diamati. Itu semua kode yang diperlukan untuk membuat formulir berfungsi. Lihat tangkapan layar di bawah ini.
SimpletWowayBinding tersedia melalui cocoapods. Untuk menginstalnya, cukup tambahkan baris berikut ke podfile Anda:
pod 'SimpleTwoWayBinding' Manish Katoch, [email protected]
SimpletWowayBinding tersedia di bawah lisensi MIT. Lihat file lisensi untuk info lebih lanjut.