我有一个名为childDidFinish
的函数,它接收类型为Coordinator
的childCoordinator
,但是当我尝试比较收到的参数和数组内的元素协调器时,错误是
这是我的Swift代码:参数类型'Coordinator'预计是类或类约束类型的实例
private(set) var childCoordinators: [Coordinator] = []
private let navigationController: UINavigationController
init(navigationController: UINavigationController){
self.navigationController = navigationController
}
func start() {
let eventListViewController: EventListViewController = .instantiate()
let eventListViewModel = EventListViewModel()
eventListViewModel.coordinator = self
eventListViewController.viewModel = eventListViewModel
navigationController.setViewControllers([eventListViewController], animated: false)
}
func startAddEvent(){
let addEventCoordinator = AddEventCoordinator(navigationController:navigationController)
childCoordinators.append(addEventCoordinator)
addEventCoordinator.start()
}
func childDidFinish(_ childCoordinator: Coordinator){
if let index = childCoordinators.firstIndex(where: { coordinator -> Bool in
return childCoordinator === coordinator//There is the problem
}){
childCoordinators.remove(at: index)
}
}
我认为你的Coordinator
是protocol
。但是为了与===
比较,它必须是一个仅类协议,这意味着它应该继承AnyObject
(在Swift的最新版本中;在早期迅速版本它必须继承class
)
所以你所需要做的就是将: AnyObject
添加到你的协议定义中:
protocol Coordinator: AnyObject {
// ...
}
如果不是这样,那么就像@matt一样,我们需要看到你的Coordinator
。
您可以选择使Coordinator
Equatable
,无论它是(协议,类或结构),只是使用==
而不是===