簡體   English   中英

是否可以在委托方法中使用完成處理程序 - Swift

[英]Is it possible to use completion handler in delegate method - Swift

我試圖在單身輔助班中處理“谷歌登錄”。

我有LoginHelper,以及一個使用完成處理程序處理登錄的方法。 如您所知,Google Sign有委托方法。 調用委托方法時,我需要通知我的完成處理程序。 我不確定,有可能嗎?

讓我們一起集思廣益,或者幫助我。

我的方法如下;

 @objc func googleLoginPressed(viewController:UIViewController, isLoginSuccessfull:(Bool) -> ())
{        
    GIDSignIn.sharedInstance().signIn()
}

對的,這是可能的

你必須設置類型:

public typealias isCompletion = (_ isConnected: Bool?) -> Void

並在類中添加這樣的變量:

var completion: isCompletion?

你的方法是這樣的:

func googleLoginPressed(viewController:UIViewController, isLoginSuccessfull:@escaping isCompletion){
    completion = isLoginSuccessfull
    GIDSignIn.sharedInstance().signIn()
}

登錄后委托方法將調用,然后執行如下操作:

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    if let error = error {
        print("\(error.localizedDescription)")
    } else {
        completion(true)
    }
}

要么

您可以使用協議執行此操作:

import UIKit
import GoogleSignIn

/// delegates to handle success and failure response of google sign-in
protocol LoginWithGoogleDelegate: class {
    func didSucceedToSignInFor(user: UserModel)
    func didFailToSignIn(error: Error)
}

/// separate class for google sign-in methods
class LoginWithGoogle: NSObject {

    // MARK: - Properties
    static let sharedInstance = LoginWithGoogle()
    weak var delegate: LoginWithGoogleDelegate?
    var globalViewController: UIViewController?

    // MARK: - Helper Methods
    /**
    configures the settings of google sign-in sdk
     - parameter viewController: it is the view controller on which we have to show the google sign-in screen
    */
    func configureGooglePlus(viewController: UIViewController) {
        globalViewController = viewController
        GIDSignIn.sharedInstance().clientID = Configuration.GoogleSignIn.clientID
        GIDSignIn.sharedInstance().delegate = self
        GIDSignIn.sharedInstance().uiDelegate = self
        GIDSignIn.sharedInstance().signIn()
    }
}

// MARK: - GIDSignInDelegate methods
extension LoginWithGoogle: GIDSignInDelegate {

    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
        if let error = error {
            print("\(error.localizedDescription)")
            self.delegate?.didFailToSignIn(error: error)
        } else {
            // Perform any operations on signed in user here.
            var googleUser = UserModel()
            googleUser.googlePlusId = user.userID
            googleUser.googlePlusToken = user.authentication.idToken
            googleUser.fullName = user.profile.name
            googleUser.email = user.profile.email

            //send the user details through LoginWithGoogleDelegate method
            self.delegate?.didSucceedToSignInFor(user: googleUser)
        }
    }

    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
        print("Something Went Wrong")
        self.delegate?.didFailToSignIn(error: error)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM