2017-05-04 107 views
0

我正试图在swift-3中实现Google Signin,但我遇到了一个非常奇怪的错误,我正在关注链接https://developers.google.com/identity/sign-in/ios/sign-in?ver=swift。但是我每次都会看到这个错误,一次又一次地实现它。 我在桥接头中添加了以下内容。'AppDelegate'不符合协议'GIDSignInDelegate'

#import <Google/SignIn.h> 

我已经安装了吊舱GoogleSignin pod 'Google/SignIn'

这是我的AppDelegate文件代码

class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate { //<--Here it gives the error 
     //Method implemented but giving the error 
     func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 
     //TODO 
     } 
    } 

'的AppDelegate' 不符合协议 'GIDSignInDelegate'

我已经试过重新安装荚

我有t清洗和其他的事情,但没有注意到帮助。

+0

我想你应该阅读关于协议和代表。 –

+0

您还没有在'GIDSignInDelegate'委托中添加'didDisconnectWith'方法 –

+0

@UmairAfzal嗯,我已经阅读了代表和协议,并且在'didDisconnectWith'方法的前面写了一个单词“optional”,这意味着它不是必须的使用该方法。 @NiravD使用它没有任何区别。 问题依然存在 –

回答

1

我只花了3个小时这一点。您需要实现正确的签名是:

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!)

但是 - 检查无论你是不是压倒一切的Error定义在您的应用程序(或其他类GIDSignInGIDGoogleUser)。我在我的应用程序中定制了一个Error类,它已经覆盖了默认的Error类。在我重命名我的Error课后,问题就消失了。

Swift编译器在这里并没有太大的帮助,因为它在错误信息中显示了两种情况下的Error类型,但没有指出它们都是不同的Error类型。

教训是不要使用Foundation中已经用于我的课程的名称。

+0

是的,我也有同样的问题这是由开发人员创建的错误类。我一直在挣扎,好像天天一样。那么我解决了它,但没有时间在这里更新它。 是的,这是解决问题的办法。 –

2

你需要添加以下两个方法的appdelegate

func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) { 

} 

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 

} 
+0

这是这个manodatory'didDisconnectWith' –

+0

它认为这是强制性的。 – KKRocks

+0

ok .............. –

0

您必须实现所有需要的GIDSignInDelegate方法消除这种误差。所以检查GIDSignInDelegate协议中的方法列表并在AppDelegate类中实现。

而且在didFinsishLaunchingOption方法设置为代表:

GIDSignIn.sharedInstance().delegate = self 
+0

我已经实现了所有必需的方法(其中只有一个存在)。 另外我实现了可选的一个,但它没有解决问题。 –

+0

您是否在AppDelegate类中设置了GIDSignIn的委托? –

+0

是的,我做到了。但没有一样的。 –

-1

这是一个非常愚蠢的错误,我在我的代码中有一个名为Error的自定义类,它引发了问题,因为GidSignInDelegate方法无法识别引用哪个错误类。如果你犯了同样的愚蠢错误,任何人都在寻找答案,请仔细检查。

+0

我不明白这个评论的投票权。 –