Petite introduction
Tous les 404! La plupart des développeurs iOS ne comprennent pas comment travailler avec Apple-MVC. En raison de critiques déraisonnables, les petits projets tentent d'écrire sur des architectures qui ne sont pas destinées à cela, les ViewControllers deviennent énormes, illisibles, etc.Dans cet article , je vais montrer un simple , moyen de rendre la vie plus facile pour moi - même, la vie pour moi - même, qui a examiné le projet au bout de 3 mois, et, bien sûr, pour tous ViewControllers. À qui convient-il? Pour les débutants ou les développeurs avec de petits projets qui se retrouvent avec une structure propre et belle.Où est-ce que tout le monde se noie?
Pour commencer, regardons le beau MVC standard préféré de tout le monde.
Voyons maintenant ce qui est mis en œuvre par la majorité.
Cool? Non! Par conséquent, nous ne le ferons pas, mais nous mettrons en œuvre la première option.Faire la structure de la beauté
Nous créons l'application Single View habituelle. J'ai mis Swift dans le champ de sélection de la langue, sans rien inclure d'autre: ni tests, ni CoreDat.Je vais montrer par l'exemple de la création d'une vitrine, car nous devons affecter toutes les parties de MVC, nous prendrons les données du modèle dans le contrôleur pour les diffuser et les afficher en vue.D'accord, il y a une tâche, il y a un projet vide. Maintenant, plongeant dans le projet, je vais tout distribuer dans des dossiers et créer des fichiers vides pour que vous compreniez où ils devraient se trouver à l'avenir. Également joint une structure de storyboard, afin de ne pas perdre de temps à l'avenir. N'oubliez pas de spécifier l'ID de réutilisation dans la cellule, j'ai écrit ProductCell.
Magnifiquement? Bien sûr, c'est beau. Nous continuons ...De la magie rapide
Nous pouvons maintenant commencer la mise en œuvre. Commençons par une vue simple. Nous devons créer tous les IBOutlets et les paramètres de notre vue.
import UIKit
class ShopView: UIView{
@IBOutlet weak var tableView: UITableView!
func configure(){
tableView.estimatedRowHeight = 50
tableView.rowHeight = 100
}
}
Voici à quoi ressemblera notre vue, dans la fonction configure (), je viens de définir les paramètres, mais la vue doit être utilisée pour les animations, et pour changer le titre du titre du bouton, etc ... Donc, primitivement dire? Mais pourquoi alors utiliser si peu cet avantage?! Donc, par exemple, j'utilise des animations dans le controller'e: view.hideBorders (self) et c'est tout, et view fera déjà une belle animation.
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)
}
Feu! Mais revenons à notre projet, il est temps de mettre en place le modèle. Et donc nous aurons des biens, et que leurs groupes soient.
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: "")
}
}
Génial, notre modèle est prêt, il reste à assembler le contrôleur, transgressons. Tout d'abord, nous devrons créer deux de nos principales entités, le modèle et la vue. Ensuite, je vais retirer les paramètres du contrôleur dans l'extension privée et transférer les données du modèle vers notre table.
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!
}
}
Il a promis d'expliquer la vue, n’a pas oublié?) Notre boutique View est une propriété calculée. Ici, nous vérifions isViewLoaded afin de ne pas provoquer le chargement involontaire de la vue lors de l'accès à cette propriété. Si la vue est déjà chargée, nous la forçons à être convertie en ShopView.Ça y est, notre mvc est prêt! Il reste à appuyer sur commande + R et à voir trois cellules.Qu'avons-nous finalement?
- Architecture simple et claire
- Charge uniforme sur le modèle, la vue, le contrôleur
- Vue de réutilisation facile
- Extensibilité aisée de notre projet
Conclusion
J'espère vraiment que cet article aidera les débutants à garder leurs projets propres, à ne pas se perdre dans le code, mais à se concentrer sur les tâches. Tous les bons et moins de bugs ^^