Безопасно пройти uinavigationController в Swift, не вызывая расы данныхIOS

Программируем под IOS
Anonymous
Безопасно пройти uinavigationController в Swift, не вызывая расы данных

Сообщение Anonymous »

Я интегрирую нативный модуль iOS с Flutter с помощью Swift. Я пытаюсь получить UinavigationController из контроллера вида корня, а затем передать его вместе с FlutterMethodcall и FlutterResult к обработчику. Тем не менее, я получаю предупреждения о потенциальных гонках данных при прохождении вызова, результата и навигации по обработчику завершения Async Dispatchqueue.main.async Block. < /P>
Вот упрощенная версия моего кода: < /p>

Код: Выделить всё

private func initialize(
_ call: FlutterMethodCall,
result: @escaping FlutterResult
) {
getNavigationControllerLegacy(call: call, result: result) { methodCall, flutterResult, navigation in
guard let nav = navigation else {
flutterResult(FlutterError(code: "NO_NAV", message: "Navigation controller not found", details: nil))
return
}
let liveness = Liveness(methodCall, result: flutterResult)
liveness.viewController = nav
liveness.execute()
}
}

private func getNavigationControllerLegacy(
call: FlutterMethodCall,
result: @escaping FlutterResult,
completion: @escaping @Sendable (FlutterMethodCall, @escaping FlutterResult, UINavigationController?) -> Void
) {
DispatchQueue.main.async {
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first,
let rootViewController = window.rootViewController else {
completion(call, result, nil)
return
}

var navigationController: UINavigationController?

if let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }),
let rootViewController = window.rootViewController {
if let nav = rootViewController as? UINavigationController {
navigationController = nav
} else if let nav = rootViewController.navigationController {
navigationController = nav
}
}

completion(call, result, navigationController)
}
}
Какой правильный способ передать uinavigationController без риска раст данных или неопределенного поведения?

Подробнее здесь: https://stackoverflow.com/questions/796 ... data-races

Вернуться в «IOS»