Свифт слабый делегат - PullRequest
0 голосов
/ 29 мая 2018

мой код:

public func start() {
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

    guard let listVC = storyboard.instantiateViewController(withIdentifier: "ListVC") as? ListVC else { return }
    let viewModel = ListViewModel(dependencies: appDependencies)
    viewModel.delegate = self
    listVC.listViewModel = viewModel

    navigationController?.pushViewController(listVC, animated: true)
}


protocol ListViewModelDelegate: class {
    func needChangeScreen(cellViewModel: UserCellViewModel)
}

final class ListViewModel {

  weak var delegate: ListViewModelDelegate?

    func userPressed(at index: IndexPath) {
        delegate?.needChangeScreen(cellViewModel: cellViewModels[index.row])
    }
}

Вызван пользователь, вызванный из UIViewController, затем я хочу отправить обратный вызов Координатору, чтобы запустить другого координатора, но делегировать?всегда ноль.Я знаю, что делегаты должны быть слабыми, но в этом случае это не работает для меня.Есть идеи?

1 Ответ

0 голосов
/ 30 мая 2018

Ладно, у меня есть исправление, но я не знаю, хорошо ли это.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let navigationController = UINavigationController()
    navigationController.setNavigationBarHidden(true, animated: false)
    window?.rootViewController = navigationController
    let appDependencies = configureAppDependencies()
    let coordinator = AppCoordinator(navigationController: navigationController, appDependencies: appDependencies)
    coordinator.start()
    window?.makeKeyAndVisible()

    return true
}

Это была моя функция делегата приложения (в AppCoordinator запускается создание и нажатие ListCoordinator), но когда я изменил, пусть координатор, например, var:

var coordinator: AppCoordinator?

слабый делегат не ноль и все работает.

...