مقدمة صغيرة
الكل 404! لا يفهم معظم مطوري iOS كيفية العمل مع Apple-MVC. بسبب وجود انتقاد غير معقول ، تحاول المشاريع الصغيرة الكتابة على بنيات غير مخصصة لهذا ، تصبح ViewControllers ضخمة وغير قابلة للقراءة ، وما إلى ذلك.في هذه المقالة سوف أعرض طريقة بسيطة لجعل الحياة أسهل بالنسبة لي ، الحياة لنفسي ، التي نظرت في المشروع بعد 3 أشهر ، وبالطبع لجميع ViewControllers. لمن هو مناسب؟ للمبتدئين أو المطورين الذين لديهم مشاريع صغيرة تنتهي ببنية نظيفة وجميلة.أين يغرق الجميع؟
للبدء ، دعنا ننظر إلى MVC القياسي المفضل لدى الجميع.
الآن دعونا نلقي نظرة على ما يتم تنفيذه من قبل الأغلبية.
رائع؟ لا! لذلك ، لن نقوم بذلك ، ولكننا سننفذ الخيار الأول.صنع هيكل الجمال
نقوم بإنشاء تطبيق Single View المعتاد. أضع Swift في مجال اختيار اللغة ، لا يشمل أي شيء آخر: لا الاختبارات ولا CoreDat.سأريكم مثال إنشاء نافذة متجر ، لأن نحن بحاجة للتأثير على جميع أجزاء MVC ، سنأخذ البيانات من النموذج في وحدة التحكم لتوزيعها وعرضها في العرض.حسنًا ، هناك مهمة ، هناك مشروع فارغ. الغوص الآن في المشروع ، سوف أقوم بتوزيع كل شيء في مجلدات وإنشاء ملفات فارغة حتى تفهم أين يجب أن تقع في المستقبل. أيضا إرفاق هيكل القصة المصورة ، حتى لا تضيع الوقت في المستقبل. لا تنس تحديد معرف إعادة الاستخدام في الخلية ، كتبت ProductCell.
بشكل رائع؟ بالطبع إنه جميل. نواصل ...بعض السحر السريع
الآن يمكننا البدء في التنفيذ. لنبدأ بعرض بسيط. نحن بحاجة إلى إنشاء جميع IBOutlets ، وإعدادات وجهة نظرنا.
import UIKit
class ShopView: UIView{
@IBOutlet weak var tableView: UITableView!
func configure(){
tableView.estimatedRowHeight = 50
tableView.rowHeight = 100
}
}
هذه هي الطريقة التي سيبدو بها العرض الخاص بنا ، في وظيفة التهيئة () ، قمت فقط بتعيين الإعدادات ، ولكن يجب استخدام العرض للصور المتحركة ، ولتغيير عنوان عنوان الزر ، وما إلى ذلك ... لذا قل بشكل بدائي؟ ولكن لماذا لا تستخدم هذه الميزة إلا قليلاً ؟! لذا ، على سبيل المثال ، أستخدم الرسوم المتحركة في وحدة التحكم'أ: view.hideBorders (self) وهذا كل شيء ، وستكون طريقة العرض بالفعل رسمًا متحركًا جميلًا.
func hideBorders(view: UIView){
UIView.animate(withDuration: 0.3,
delay: 0,
options: .curveEaseInOut,
animations: {
self.createViewHeighConstraint.constant = view.bounds.height * 0.6
self.editButton.layer.cornerRadius = 20
self.postView.layer.shadowOpacity = 0
self.postView.layer.cornerRadius = 0
view.layoutIfNeeded()
}, completion: nil)
}
نار! ولكن بالعودة إلى مشروعنا ، حان الوقت لتنفيذ النموذج. وهكذا سيكون لدينا بضائع ، وربما تكون مجموعاتهم.
import Foundation
public struct Product {
public let name: String
}
public struct ProductGroup {
public let products: [Product]
public let title: String
}
extension ProductGroup{
public static func vegetables() -> ProductGroup{
let products = [
Product(name: ""),
Product(name: ""),
Product(name: "")
]
return ProductGroup(products: products, title: "")
}
}
رائع ، نموذجنا جاهز ، يبقى تجميع وحدة التحكم ، لننتهك. بادئ ذي بدء ، سنحتاج إلى إنشاء اثنين من الكيانات الرئيسية لدينا ، والنموذج والرؤية. ثم سأقوم بإخراج إعدادات وحدة التحكم في الملحق الخاص ونقل البيانات من النموذج إلى جدولنا.
import UIKit
class ShopController: UIViewController {
private var shopModel = ProductGroup.vegetables()
private var shopView: ShopView! {
guard isViewLoaded else { return nil }
return (view as! ShopView)
}
override func viewDidLoad() {
super.viewDidLoad()
configure()
}
}
private extension ShopController{
func configure(){
shopView.tableView.delegate = self
shopView.tableView.dataSource = self
}
}
extension ShopController: UITableViewDataSource, UITableViewDelegate{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return shopModel.products.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ProductCell")
cell?.textLabel?.text = shopModel.products[indexPath.row].name
return cell!
}
}
وعد بشرح وجهة النظر ، لم ينسى؟) our viewView هو خاصية محسوبة. هنا نتحقق من isViewLoaded حتى لا نتسبب في تحميل العرض دون قصد عند الوصول إلى هذه الخاصية. إذا تم تحميل العرض بالفعل ، فإننا نفرض تحويله إلى ShopView.هذا كل شيء ، mvc لدينا جاهز! يبقى الضغط على الأمر + R ورؤية ثلاث خلايا.ماذا لدينا في النهاية؟
- بنية بسيطة وواضحة
- تحميل موحد على النموذج ، العرض ، وحدة التحكم
- عرض سهل الاستخدام
- توسيع مشروعنا بسهولة
استنتاج
آمل حقًا أن تساعد هذه المقالة المبتدئين في الحفاظ على نظافة مشروعاتهم ، وليس الضياع في التعليمات البرمجية ، ولكن التركيز على المهام. جميع البق جيدة وأقل ^ ^