При внедрении Google Sign in в firebase я запутался. Я обнаружил, что могу переместить лог c из AppDelegate
, как в документации, в другой файл. Затем я сделал это двумя способами, которые отлично работают.
В первом случае я использовал Coordinator
для делегирования события кнопки, а во втором примере. Я создал экземпляр своего пользовательского GoogleLoginButtonView
, который соответствует GIDSignInDelegate
, а затем делегирую свои события кнопки из этого класса своей кнопке.
Вопрос в том; В чем разница между ними и какой вариант использовать?
struct GoogleLoginButtonView: UIViewRepresentable {
func makeCoordinator() -> Coordinator {
return Coordinator()
}
func makeUIView(context: UIViewRepresentableContext<GoogleLoginButtonView>) -> GIDSignInButton {
let button = GIDSignInButton()
GIDSignIn.sharedInstance().delegate = context.coordinator
return button
}
func updateUIView(_ uiView: GIDSignInButton, context: UIViewRepresentableContext<GoogleLoginButtonView>) { }
class Coordinator: NSObject, GIDSignInDelegate {
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) { }
func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) { }
}
}
Второй способ:
struct GoogleLoginButtonView: UIViewRepresentable {
private var bt = GB()
func makeUIView(context: UIViewRepresentableContext<GoogleLoginButtonView>) -> GIDSignInButton {
let button = GIDSignInButton()
GIDSignIn.sharedInstance().delegate = bt
return button
}
func updateUIView(_ uiView: GIDSignInButton, context: UIViewRepresentableContext<GoogleLoginButtonView>) { }
}
class GB: NSObject, GIDSignInDelegate {
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) { }
func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) { }
}