与类型为Coordinator的数组比较时出现问题



我有一个名为childDidFinish的函数,它接收类型为CoordinatorchildCoordinator,但是当我尝试比较收到的参数和数组内的元素协调器时,错误是

参数类型'Coordinator'预计是类或类约束类型的实例

这是我的Swift代码:
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)
}
}

我认为你的Coordinatorprotocol。但是为了与===比较,它必须是一个仅类协议,这意味着它应该继承AnyObject(在Swift的最新版本中;在早期迅速版本它必须继承class)

所以你所需要做的就是将: AnyObject添加到你的协议定义中:

protocol Coordinator: AnyObject {
// ...
}

如果不是这样,那么就像@matt一样,我们需要看到你的Coordinator

您可以选择使CoordinatorEquatable,无论它是(协议,类或结构),只是使用==而不是===

相关内容

  • 没有找到相关文章

最新更新