【发布时间】:2018-06-01 10:55:12
【问题描述】:
这个问题可能看起来很基本,但我发布它是为了获得建议。
以下是使用 MVVM 模式的示例登录模块。
viewcontroller代码如下。
class ViewController: UIViewController {
private var loginviewmodel = LoginViewModel()
@IBOutlet weak var textFieldUserName: UITextField!
@IBOutlet weak var textFieldPassword: UITextField!
@IBAction func signIn(_ sender: Any) {
//CASE 1
loginviewmodel.performLogin(name: textFieldUserName.text!, pwd: textFieldPassword.text!)
//CASE 2
//loginviewmodel.performLogin()
}
override func viewDidLoad() {
super.viewDidLoad()
textFieldUserName.delegate = self
textFieldPassword.delegate = self
}
}
extension ViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
switch textField {
case textFieldUserName:
loginviewmodel.updateUsername(inputText: inputText)
case textFieldPassword:
loginviewmodel.updatePassword(inputText: inputText)
default:
return false
}
return true
}
}
而viewmodel代码如下。
class LoginViewModel {
var userName: String?
var password: String?
func updateUsername(inputText: String) {
self.userName = inputText
}
func updatePassword(inputText: String) {
self.password = inputText
}
func performLogin() {
print("Login successful with username = \(userName) and password = \(password).")
}
func performLogin(name: String, pwd: String) {
print("Login successful with username = \(name) and password = \(pwd).")
}
}
我有两种情况,其中值从视图控制器传递到视图模型的方式不同。
文本直接作为函数参数传递的第一种情况
第二种情况,通过文本委托方法传递文本
这里的首选方式是什么?
【问题讨论】:
标签: ios swift mvvm parameter-passing uitextfielddelegate