import UIKit
import Firebase
import FirebaseAuth
import GoogleSignIn

class LoginViewController: UIViewController, UITextFieldDelegate,GIDSignInDelegate, GIDSignInUIDelegate {

@IBOutlet var mailField: UITextField!
@IBOutlet var passwdField: UITextField!

@IBOutlet weak var googleSignIn: GIDSignInButton!

override func viewDidLoad() {
    super.viewDidLoad()

    mailField.delegate = self
    passwdField.delegate = self

    GIDSignIn.sharedInstance().clientID = FIRApp.defaultApp()?.options.clientID
    GIDSignIn.sharedInstance().delegate = self
    GIDSignIn.sharedInstance().uiDelegate = self
}

@IBAction func googleSignInClicked(sender: AnyObject) {
    GIDSignIn.sharedInstance().signIn()
}


func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!,
            withError error: NSError!) {
    print("Google Sing In didSignInForUser")
    if let error = error {
        print(error.localizedDescription)
        return
    }
    let authentication = user.authentication
    let credential = FIRGoogleAuthProvider.credential(withIDToken: (authentication?.idToken)!,accessToken: (authentication?.accessToken)!)
    //ユーザ登録後の処理....

}

func signIn(signIn: GIDSignIn!, didDisconnectWithUser user:GIDGoogleUser!,
            withError error: NSError!) {
    print("Google Sing In didDisconnectWithUser")
    // Perform any operations when the user disconnects from app here.
    // ...
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@objc(textFieldShouldReturn:) func textFieldShouldReturn(_ mailField: UITextField) -> Bool{
    mailField.resignFirstResponder()
    return true
}

func passwdFieldShouldReturn(_ passwdField: UITextField) -> Bool{
    passwdField.resignFirstResponder()
    return true
}


@IBAction func loginBtn(_ sender: Any) {
    var mailAdress = mailField.text
    var password = passwdField.text

    //ワーニングが出るため別の方法を使用したほうがいい可能性有り

    FIRAuth.auth()?.signIn(withEmail: mailAdress!, password: password!) { (user, error) in
        if let error = error {
            print("サインインできません \(error)")
            let alert: UIAlertController = UIAlertController(title: "エラー", message: "メールアドレスまたはパスワードが間違っています", preferredStyle:  UIAlertControllerStyle.alert)
            let defaultAction: UIAlertAction = UIAlertAction(title: "リトライ", style: UIAlertActionStyle.default, handler:{
                (action: UIAlertAction!) -> Void in
                //処理部分だが、そのままAlertを閉じさせればいいためコードなし

            })
            alert.addAction(defaultAction)
            self.present(alert, animated: true, completion: nil)
            return
            //ログイン失敗時の処理
        }

        if let user = user {
            print("user : \(user.email!) サインインできました")
            let storyboard: UIStoryboard = self.storyboard!
            let nextView = storyboard.instantiateViewController(withIdentifier: "joined") as!JoinedViewController
            self.present(nextView, animated: true, completion: nil)
            //ログイン成功時の処理
        }
    }

 }

この様な形で現在書いているのですが

Type 'LoginViewController' does not conform to protocol 'GIDSignInDelegate'

とエラーが出てしまいます。これらのコードはどの様な形で実装したらいいのでしょうか?

Protocol requires function 'sign(_:didSignInFor:withError:)' with type '(GIDSignIn!, GIDGoogleUser!, Error!) -> Void'; do you want to add a stub? (GoogleSignIn.GIDSignInDelegate)

と書かれているので

func sign(_:didSignInFor:withError:)

という感じでしょうか?誰か教えてください!

追記
画像の説明をここに入力