iOS应用程序中的MVC模式

219 阅读3分钟

MVC pattern in iOS apps

在这篇文章中,我们已经深入解释了iOS应用程序中的MVC模式。MVC是Model View Controller的缩写,它是一种软件设计模式,将软件项目分为模型、视图和控制器三个部分。

内容表。

  1. 什么是MVC软件设计模式?
  2. MVC如何工作?
  3. 在iOS应用程序中实现MVC

我们将深入探讨。

什么是MVC软件设计模式?

MVC是Model View Controller的缩写,它是一种软件设计模式,将软件项目组织成模型、视图和控制器三个部分。

模型

模型是该模式的数据存储组件,它使用数据结构来处理所有与UI无关的数据,它也直接管理应用程序的规则和数据。

视图

视图是用户界面,用户通过它与应用程序进行交互。它包括像按钮、表视图、集合视图等UI组件。

控制器

控制器作为模型和视图之间的桥梁,模型和视图只能通过控制器来相互交流。

MVC是如何工作的?

MVC的基本功能如下所示
MVC pattern in iOS apps

在这里,用户看到的是视图并与应用程序进行交互。例如,考虑一个在表格视图中以升序排列数字的应用程序。当用户想对数字进行降序排序时,用户通过选择UI(视图)中的排序选项来发送请求,视图将请求发送到控制器,控制器将转到模型组件,使模型组件以降序排序数据,并更新视图中显示的排序数字。

在iOS应用程序中实现MVC

我们将创建一个测验应用程序,它使用MVC模式,所有的问题和他们的答案都将存储在模型层。

MVC pattern in iOS apps

  • 打开Xcode并创建一个空白的UIKit项目。
  • 在项目导航器中创建三个新的组Model、View、Controller并在其中添加以下文件

MVC pattern in iOS apps

  • 打开Main.storyboard,在这里我们要设计我们的UI,它属于View组件。设计一个类似下图的UI。

MVC pattern in iOS apps

  • 现在打开QuizModel文件并添加以下代码
import Foundation

class QuizModel
{
    static let SharedObj = QuizModel()
    
    private let Questions: [String] = [
        "2 + 10 = ?",
        "What is capital of Vermont?",
        "Who is the founder of Microsoft"
    ]
    
    private let Answers: [String] = [
        "12",
        "Montpelier",
        "Bill and Paul"
    ]
    
    func getQuestions() -> [String]
    {
        return Questions
    }
    
    func getAnswers() -> [String]
    {
        return Answers
    }
}

这个结构有两个数组,一个是问题,另一个是答案。在这里我们使用一个单子对象,通过控制器与它们进行交互。

  • 打开CustomButton文件,添加以下代码
import Foundation
import UIKit
class CustomButton: UIButton
{
    override  func awakeFromNib() {
        super.awakeFromNib()
        
        layer.cornerRadius = 5
        backgroundColor = UIColor.systemOrange
        layer.borderWidth = 2
        layer.borderColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
    }
}

这里我们通过对UIButton类的子类化来定义UIButton的自定义属性。

  • 打开控制器文件,为UI组件添加IBOutlets和IBActions,并添加以下几行代码
class ViewController: UIViewController {

    var Questions = [String]()
    var Answers = [String]()
    var currentquestionindex = 0
    
    @IBOutlet weak var QuestionLabel: UILabel!
    @IBOutlet weak var AnswerLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
       
        Questions = QuizModel.SharedObj.getQuestions()
        Answers = QuizModel.SharedObj.getAnswers()
        
        QuestionLabel.text = Questions.randomElement()
        
    }

    @IBAction func NextQuestionButtonPressed(_ sender: Any) {
        currentquestionindex += 1
        
        if(currentquestionindex == Questions.count)
        {
            currentquestionindex = 0
        }
        else
        {
            QuestionLabel.text = Questions[currentquestionindex]
        }
    }
    
    @IBAction func ShowAnswerButtonPressed(_ sender: Any) {
        
        AnswerLabel.text = Answers[currentquestionindex]
    }
}

这里我们定义了应用程序的核心功能。这个文件充当控制器。它使用IBOutlets和IBAction接收用户与视图的交互,并将用户的请求发送到模型,从模型中获取数据并更新视图中的数据。

一切准备就绪,现在构建项目并在模拟器中运行它。
MVC pattern in iOS apps

让我们用一个小测验来结束这篇文章吧

问题

iOS应用程序中经常使用的另一种软件设计模式是什么?

MVVM

VMC

MVA

视觉模式

MVVM(Model-View-View-Model)是iOS应用中使用的另一种软件设计模式。

通过OpenGenus的这篇文章,你一定对iOS应用中的MVC模式有了完整的了解。