Назад к задачам
ЯндексПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
7
Реализовать клиент аналитики с выводом в консоль и записью в файл
Компании, где спрашивали:
Условие задачи
Требуется обеспечить работу сервиса аналитики так, чтобы он мог выводить события в консоль, а также сохранять их в файл на втором экране.
public struct AnalyticsEvent {
public var name: String
public var params: [String: String]
public init(name: String, params: [String: String]) {
self.name = name
self.params = params
}
}
public final class AnalyticsClient {
public func report(_ event: AnalyticsEvent) { ... }
}
final class Screen1ViewController: UIViewController {
init(analytics: AnalyticsClient) {
self.analytics = analytics
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated: animated)
analytics.report(AnalyticsEvent(name: "screen1_did_appear", params: [:]))
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated: animated)
analytics.report(AnalyticsEvent(name: "screen1_did_disappear", params: [:]))
}
}
final class Screen2ViewController: UIViewController {
init(analytics: AnalyticsClient) {
self.analytics = analytics
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated: animated)
analytics.report(AnalyticsEvent(name: "screen2_did_appear", params: [:]))
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated: animated)
analytics.report(AnalyticsEvent(name: "screen2_did_disappear", params: [:]))
}
}
Ваша задача – дополнить реализацию AnalyticsClient так, чтобы при вызове report(_:) событие выводилось в консоль, а при работе экрана 2 дополнительно записывалось в файл. Нужно продумать, где хранить путь к файлу, как открывать/закрывать его и обеспечить потокобезопасность, если клиент будет использоваться из разных потоков.