Координатор SwiftUI против экземпляра UIViewRepresentable - PullRequest
0 голосов
/ 06 мая 2020

При внедрении 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!) { }
}
...