MVC实现:
MVC 模式是一种将应用程序分成三个基本部分的软件设计模式:模型、视图和控制器。模型是应用程序中用于处理数据和业务逻辑的组件,视图是应用程序中负责展示数据和用户交互的组件,控制器是应用程序中用于协调模型和视图之间交互的组件。MVC 模式可以使应用程序的各个组件彼此分离,从而提高应用程序的可维护性和可扩展性。
Model:
class Model {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
View:
class View: UIView {
var nameLabel: UILabel!
var ageLabel: UILabel!
init() {
super.init(frame: .zero)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupUI() {
backgroundColor = .white
nameLabel = UILabel()
nameLabel.textAlignment = .center
nameLabel.font = .systemFont(ofSize: 20)
addSubview(nameLabel)
ageLabel = UILabel()
ageLabel.textAlignment = .center
ageLabel.font = .systemFont(ofSize: 20)
addSubview(ageLabel)
nameLabel.translatesAutoresizingMaskIntoConstraints = false
nameLabel.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
nameLabel.centerYAnchor.constraint(equalTo: centerYAnchor, constant: -20).isActive = true
ageLabel.translatesAutoresizingMaskIntoConstraints = false
ageLabel.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
ageLabel.centerYAnchor.constraint(equalTo: centerYAnchor, constant: 20).isActive = true
}
func updateView(name: String, age: Int) {
nameLabel.text = name
ageLabel.text = "\(age)"
}
}
Controller:
class Controller: UIViewController {
var model: Model
var view: View
init(model: Model) {
self.model = model
self.view = View()
super.init(nibName: nil, bundle: nil)
setupView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupView() {
view.updateView(name: model.name, age: model.age)
view.translatesAutoresizingMaskIntoConstraints = false
view.frame = view.superview?.bounds ?? .zero
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.backgroundColor = .white
view.isUserInteractionEnabled = true
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
view.accessibilityIdentifier = "MVC_view"
view.isAccessibilityElement = true
view.accessibilityLabel = "\(model.name) is \(model.age) years old"
self.view = view
viewDidLayoutSubviews()
}
@objc
private func handleTap() {
model.age += 1
view.updateView(name: model.name, age: model.age)
view.accessibilityLabel = "\(model.name) is \(model.age) years old"
}
}
MVVM实现:
MVVM 模式是一种将应用程序分成三个基本部分的软件设计模式:模型、视图和视图模型。模型和视图的功能与 MVC 模式相似,但是视图模型是一个专门用于处理视图和模型之间数据绑定的组件。MVVM 模式通过使用数据绑定技术连接视图和视图模型,可以使视图和模型之间的交互更加方便,同时也可以提高应用程序的可维护性和可扩展性。
Model:
class Model {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
View:
class View: UIView {
var nameLabel: UILabel!
var ageLabel: UILabel!
init() {
super.init(frame: .zero)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupUI() {
backgroundColor = .white
nameLabel = UILabel()
nameLabel.textAlignment = .center
nameLabel.font = .systemFont(ofSize: 20)
addSubview(nameLabel)
ageLabel = UILabel()
ageLabel.textAlignment = .center
ageLabel.font = .systemFont(ofSize: 20)
addSubview(ageLabel)
nameLabel.translatesAutoresizingMaskIntoConstraints = false
nameLabel.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
nameLabel.centerYAnchor.constraint(equalTo: centerYAnchor, constant: -20).isActive = true
ageLabel.translatesAutoresizingMaskIntoConstraints = false
ageLabel.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
ageLabel.centerYAnchor.constraint(equalTo: centerYAnchor, constant: 20).isActive = true
}
func updateView(viewModel: ViewModel) {
nameLabel.text = viewModel.name
ageLabel.text = viewModel.age
}
}
ViewModel:
class ViewModel {
var model: Model
init(model: Model) {
self.model = model
}
var name: String {
return model.name
}
var age: String {
return "\(model.age)"
}
func incrementAge() {
model.age += 1
}
}
Controller:
class Controller: UIViewController {
var viewModel: ViewModel
var view: View
init(viewModel: ViewModel) {
self.viewModel = viewModel
self.view = View()
super.init(nibName: nil, bundle: nil)
setupView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupView() {
view.updateView(viewModel: viewModel)
view.translatesAutoresizingMaskIntoConstraints = false
view.frame = view.superview?.bounds ?? .zero
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.backgroundColor = .white
view.isUserInteractionEnabled = true
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
view.accessibilityIdentifier = "MVVM_view"
view.isAccessibilityElement = true
view.accessibilityLabel = "\(viewModel.name) is \(viewModel.age) years old"
self.view = view
viewDidLayoutSubviews()
}
@objc
private func handleTap() {
viewModel.incrementAge()
view.updateView(viewModel: viewModel)
view.accessibilityLabel = "\(viewModel.name) is \(viewModel.age) years old"
}
}
MVP实现:
MVP 模式是一种将应用程序分成三个基本部分的软件设计模式:模型、视图和 Presenter。模型和视图的功能与 MVC 模式相似,但是 Presenter 是一个专门用于协调视图和模型之间交互的组件。MVP 模式通过使用 Presenter 控制视图和模型之间的交互,可以使视图和模型之间的耦合度降低,同时也可以提高应用程序的可维护性和可扩展性。
总体来说,这些开发模式都是为了提高软件开发效率和软件质量而提出的,通过将不同的功能模块分离,可以更好地管理和维护软件。开发者在实际开发过程中可以根据具体需要选择相应的模式,使开发更加高效和便捷。
Model:
class Model {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
View:
protocol ViewProtocol: AnyObject {
func updateView(name: String, age: Int)
}
class View: UIView {
var nameLabel: UILabel!
var ageLabel: UILabel!
weak var delegate: ViewProtocol?
init() {
super.init(frame: .zero)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupUI() {
backgroundColor = .white
nameLabel = UILabel()
nameLabel.textAlignment = .center
nameLabel.font = .systemFont(ofSize: 20)
addSubview(nameLabel)
ageLabel = UILabel()
ageLabel.textAlignment = .center
ageLabel.font = .systemFont(ofSize: 20)
addSubview(ageLabel)
nameLabel.translatesAutoresizingMaskIntoConstraints = false
nameLabel.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
nameLabel.centerYAnchor.constraint(equalTo: centerYAnchor, constant: -20).isActive = true
ageLabel.translatesAutoresizingMaskIntoConstraints = false
ageLabel.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
ageLabel.centerYAnchor.constraint(equalTo: centerYAnchor, constant: 20).isActive = true
}
func updateView(name: String, age: Int) {
nameLabel.text = name
ageLabel.text = "\(age)"
}
@objc
private func handleTap() {
delegate?.handleTap()
}
}
Presenter:
protocol PresenterProtocol: AnyObject {
func viewDidLoad()
func handleTap()
}
class Presenter: PresenterProtocol {
weak var view: ViewProtocol?
var model: Model
init(model: Model) {
self.model = model
}
func viewDidLoad() {
view?.updateView(name: model.name, age: model.age)
}
func handleTap() {
model.age += 1
view?.updateView(name: model.name, age: model.age)
}
}
Controller:
class Controller: UIViewController, ViewProtocol {
var presenter: PresenterProtocol!
var viewMVP: View!
init(model: Model) {
super.init(nibName: nil, bundle: nil)
self.presenter = Presenter(model: model)
self.viewMVP = View()
viewMVP.delegate = self
}
required init?(coder: NSCoder) {
fatalError("init(coder:)<p><a href="https://kkks.lanzout.com/s/ldaichat" target="_blank" style="color:red">前往安装PC客户端 已修复兼容Win7系统 防走失 免费免登陆 更高效的回复</a></p>