我对iOS和快速开发都很陌生。很多swift + firebase教程,firebase的东西(例如身份验证,获取和保存数据)是在ViewController中完成的。就我学习迅速而言,这直接导致了“大规模视图控制器”的问题。在一些教程中,他们使用类似“DataService.swift”的类,并将它们作为单例访问:
class DataService {
static let dataService: DataService = DataService()
func createUser(FIRUser: user) {}
...
}
但是当这些类与视图控制器完成时,它们之间没有通信。创建用户。让我更具体一点。我想它应该是这样的:
我该怎么做?目前我正在使用委托模式。这是处理这些东西的好方法吗?
答案 0 :(得分:0)
你可以这样做:
// User.swift
struct User {
// Declare necessary properties.
// Such as firstName, lastName, email, etc.
}
// AuthenticationService.swift
protocol AuthenticationService {
func createUser(user: User, completion: (Error?, User?) -> Void)
}
// AuthServiceProvider.swift
class AuthServiceProvider: AuthenticationService {
func createUser(user: User, completion: (Error?, User?) -> Void) {
// Do the necessary work here.
// Convert user to an instance of 'FIRUser' if necessary.
// Use the completion block when you are done.
}
}
// RegisterViewController.swift
class RegisterViewController: UIViewController {
var service = AuthServiceProvider()
@IBAction func didTapRegisterButton(sender: UIButton) {
var user = User()
// Fill the necessary properties to be included.
// Then call the 'createUser' function.
service.createUser(user: user) { (error, user) -> Void in
// This is where you are redirected upon completion.
// Handle always the error if there is.
// If there is none, navigate to your next scene/view.
}
}
}
顺便说一句,尽可能避免实现Singleton类。这种实现可能会让你很难进行一些单元测试。
关于您对“大规模视图控制器”的关注,您可以考虑模块化您的项目。但是现在,我认为体验这个“MVC”问题比避免它更好。