【问题标题】:How do I modify function to be used in MVP architecture?如何修改要在 MVP 架构中使用的功能?
【发布时间】:2023-01-09 02:52:02
【问题描述】:

我有下面的功能。它工作正常。

当用户键入任何字符时,它会验证用户输入并根据输入隐藏一些 imageView。

@IBAction func onEmailValueChanged(_ sender: UITextField) {
    let hasMinimumLength = TextValidationHelper.validateHasMinimumLength(password: sender.text!)
    passLengthCheckmarkImageView.isHidden = hasMinimumLength ? false : true
    let hasCapitalLetter = TextValidationHelper.validateHasCapitalLetter(password: sender.text!)
    passHasUppercaseCheckmarkImageView.isHidden = hasCapitalLetter ? false : true
    let hasNumber = TextValidationHelper.validateHasNumber(password: sender.text!)
    passHasNumberCheckmarkImageView.isHidden = hasNumber ? false : true
    let hasSpecialCharacter = TextValidationHelper.validateHasSpecialCharacter(password: sender.text!)
    passHasSymbolCheckmarkImageView.isHidden = hasSpecialCharacter ? false : true
    
    resetButton.isHidden = hasMinimumLength && hasCapitalLetter && hasNumber && hasSpecialCharacter ? false : true 
}

但现在我想在此函数上应用 MVP 模型以从 ViewController 文件中删除该函数。 我怎样才能做到这一点?

我是否需要发布更多代码才能为这个问题创建答案?

【问题讨论】:

  • 询问如何实现应用程序架构的范围太广了。

标签: swift mvp


【解决方案1】:

将任何架构模式仅用于方法并不是一个好的做法。因此,假设您有一个包含许多类或文件的完整应用程序。

重要的是,使用任何特定模式都不是固定/强制的。这实际上取决于代码,有时您最终会编写很多代码来处理一个方法。因此,请尝试考虑使代码更具可测试性和可扩展性的最佳方法。

但供您参考,您可以检查以下代码:

在视图控制器上:

lazy var presenter:Presenter = Presenter(view:self)


 @IBAction func onEmailValueChanged(_ sender: UITextField) {
    presenter.validateHasMinimumLength(password: sender.text!)
    presenter.validateHasCapitalLetter(password: sender.text!)
    presenter.validateHasNumber(password: sender.text!)
    presenter.validateHasSpecialCharacter(password: sender.text!)
}

//Adopting ViewController:PrensenterViewProtocol on ViewController

extension ViewController:PrensenterViewProtocol {

func updateLengthCheckmarkImageView(isHidden:Bool) {
    passLengthCheckmarkImageView.isHidden = isHidden
}

func updateUpperCaseCheckmarkImageView(isHidden:Bool) {
    passHasUppercaseCheckmarkImageView.isHidden = isHidden
}

func updateNumberCheckmarkImageView(isHidden:Bool) {
    passHasNumberCheckmarkImageView.isHidden = isHidden
}

func updateSymbolCheckmarkImageView(isHidden:Bool) {
    passHasSymbolCheckmarkImageView.isHidden = isHidden
}

func updateResetButton(isHidden:Bool) {
    resetButton.isHidden = isHidden
}

}

PresenterView 协议为:

protocol PrensenterViewProtocol:NSObjectProtocol {
    func updateLengthCheckmarkImageView(isHidden:Bool)
    func updateUpperCaseCheckmarkImageView(isHidden:Bool)
    func updateNumberCheckmarkImageView(isHidden:Bool)
    func updateSymbolCheckmarkImageView(isHidden:Bool)
    func updateResetButton(isHidden:Bool)
}

主持人为:

class Presenter {
weak var view:PrensenterViewProtocol!
private var hasMinimumLength:Bool = false
private var hasCapitalLetter:Bool = false
private var hasNumber:Bool = false
private var hasSpecialCharacter:Bool = false

init(view:PrensenterViewProtocol) {
    self.view = view
}
    
func validateHasMinimumLength(password:String?) {
    hasMinimumLength = TextValidationHelper.validateHasMinimumLength(password: password)
    self.view.updateLengthCheckmarkImageView(isHidden: hasMinimumLength)
    checkAllValidations()
}

func validateHasCapitalLetter(password:String?) {
    hasCapitalLetter = TextValidationHelper.validateHasCapitalLetter(password: password)
    self.view.updateUpperCaseCheckmarkImageView(isHidden:hasCapitalLetter )
    checkAllValidations()
}

func validateHasNumber(password:String?) {
    hasNumber = TextValidationHelper.validateHasNumber(password: password)
    self.view.updateNumberCheckmarkImageView(isHidden: hasNumber)
    checkAllValidations()
}

func validateHasSpecialCharacter(password:String?) {
    hasSpecialCharacter = TextValidationHelper.validateHasSpecialCharacter(password: password)
    self.view.updateSymbolCheckmarkImageView(isHidden: hasSpecialCharacter)
    checkAllValidations()
}

func checkAllValidations() {
    let areAllValid:Bool = hasMinimumLength && hasCapitalLetter && hasNumber && hasSpecialCharacter ? false : true
    self.view.updateResetButton(isHidden: areAllValid)
}

}

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2014-06-30
    • 2023-04-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多