如何同时检查 textField 和 textView 中的相同条件?

How to check the same condition in textField and textView at the same time?

我有2个textFields和1个textView,所有这些字段都有内容,来自previousViewController,我需要根据用户在这些字段中的更改启用或禁用rightBarButtonItem,如果新内容是与来自 previousViewController 的当前内容不同。如何同时查看textFields和textView?现在我有(条件有时会相互矛盾)

在 viewDidLoad 中:

loginTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

displayNameTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

然后:

@objc func textFieldDidChange(_ textField: UITextField) {

    if displayNameTextField.text != currentDisplayName || loginTextField.text != currentUsername {
        self.navigationItem.rightBarButtonItem?.isEnabled = true
    } else {
        self.navigationItem.rightBarButtonItem?.isEnabled = false
    }

}

func textViewDidChangeSelection(_ textView: UITextView) {
    if aboutTextView.text == currentAbout {
        self.navigationItem.rightBarButtonItem?.isEnabled = false
    } else {
        self.navigationItem.rightBarButtonItem?.isEnabled = true
    }
}

为什么不把它提取到函数中,然后像这样检查它:

@objc func textFieldDidChange(_ textField: UITextField) {
    validateFields()
}

func textViewDidChangeSelection(_ textView: UITextView) {
    validateFields()
}

func validateFields() {
    if aboutTextView.text == currentAbout || displayNameTextField.text == currentDisplayName || loginTextField.text == currentUsername {
        self.navigationItem.rightBarButtonItem?.isEnabled = false
    } else {
        self.navigationItem.rightBarButtonItem?.isEnabled = true
    }
}