Код в делегате приложения против View Controller - PullRequest
0 голосов
/ 28 мая 2018

Я изучаю аутентификацию Google Signin Firebase в swift 4 / XCode 9`.

В документации Firebase они объявляют AppDelegate.swift как GIDSignInDelegate.Обычно я ожидал, что контроллер представления будет delegate управлять, а затем выполнять действия для входа в систему, выхода из системы и т. Д. *

Может кто-нибудь объяснить, в чем разница в этом приложении в приложении delegate по сравнению сViewController (если есть).Есть ли плюсы и минусы в использовании одного, а не другого?

Лично мне проще сделать это в ViewController или передать на аутсорсинг классу, поскольку выполнять переход и другие операции проще, но, возможно, это не так.лучшее решение?

Ответы [ 2 ]

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

AppDelegate - это одноэлементный экземпляр, в отличие от viewControllers.Поэтому добавление AppDelegate в качестве делегата в GIDSignInDelegate дает вам гибкость для запуска методов аутентификации Firebase с любого контроллера представления, который вам нужен, и не беспокоясь об установке контроллера представления в качестве делегата в viewDidLoad.Поскольку обычно состояния входа в систему глобальны для приложения, а не только для конкретного ViewController, имеет смысл добавить синглтон в качестве делегата в GIDSignInDelegate, но тогда делегату приложения не нужно быть местом для выгрузки всего кода, скорее вы можете создать отдельный собственный класс синглтона.- Sandeep Bhandari 23 часа назад поднимите флажок и наслаждайтесь всеми преимуществами синглтона, сохраняя делегат своего приложения в чистоте.Возможен сценарий, когда вход в систему / регистрация появляется в разных ViewControllers в приложении, вместо добавления каждого такого VC в качестве делегата каждый раз в ViewDidLoad имеет смысл иметь один общий экземпляр, который имеет дело с процессом аутентификации.Поскольку этот экземпляр должен быть доступен всем классам в вашем приложении, создание единственного экземпляра имеет смысл, а использование делегата приложения - нет.AppDelegate - это не свалка для всего распространенного кода в вашем приложении - Sandeep Bhandari 23 часа назад

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

Документация Firebase не ошибается, предлагая AppDelegate, так как это первый объект, который оживает и используется приложением.Но ваш GIDSignInDelegate не должен быть ни AppDelegate, ни контроллером представления.Все зависит от архитектуры вашего проекта (структуры).Если ваше приложение велико и вы разделяете свою логику на несколько «модулей», вы можете создать общий (одноэлементный) объект, такой как SessionService или LoginService и т. Д., Который может быть создан при запуске приложения и действовать как ваш GIDSignInDelegate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...