使用Error类型作为参数的iOS AWS协议方法会导致协议不符合

时间:2017-11-04 23:50:19

标签: ios swift xcode amazon-web-services

我正在使用AWS Mobile Hub来实现我在Swift中编写的iOS应用程序的登录。直到本周,它运行良好,但更新到Xcode 9.1导致出现几个构建错误。我还有2个错误。两者都涉及特定于协议的呼叫; 'AWSSignInDelegate'和'AWSCognitoIdentityPasswordAuthentication'。

extension SignInVC: AWSSignInDelegate
{
   func onLogin(signInProvider: AWSSignInProvider, result: Any?, error: Error?)
   {
      //Code
   }
}

extension SignInVC: AWSCognitoIdentityPasswordAuthentication
{
   func getDetails(_ authenticationInput: AWSCognitoIdentityPasswordAuthenticationInput, passwordAuthenticationCompletionSource: AWSTaskCompletionSource<AWSCognitoIdentityPasswordAuthenticationDetails>)
   {
      //Code
   }

   func didCompleteStepWithError(_ error: Error?)
   {
      //Code
   }
}

错误:

  

类型'SignInVC'不符合协议'AWSSignInDelegate'

     

候选人具有非匹配类型'(AWSSignInProvider,Any?,错误?) - &gt; ()'

  

类型'SignInVC'不符合协议'AWSCognitoIdentityPasswordAuthentication'

     

候选人有不匹配的类型'(错误?) - &gt; ()'

到目前为止我有什么: 错误仅发生在包含swift类型“Error”作为参数的方法中。上面的'getDetails'调用看起来不像其他2个方法那样抛出错误。

这里有一个类似的问题: Cannot conform to STPAddCardViewControllerDelegate since Xcode 8 GM on Swift 3

建议将@escaping添加到完成块以修复类似的错误。我的问题不涉及完成块。所以我假设我错误地将swift错误类型作为参数处理,看到objc中这两个方法的实现使用了NSError。

有关如何解决此问题的任何建议? 非常感谢!

2 个答案:

答案 0 :(得分:1)

我发现标准的Swift Error类型被我项目中其他地方命名不当的Error类覆盖了。

答案 1 :(得分:0)

我对AWS不是很熟悉,但是我看了一下你正在使用的协议的文档,而且功能名称并不完全匹配,在这里查看我认为最新的名称。

http://docs.aws.amazon.com/AWSiOSSDK/latest/Protocols/AWSCognitoIdentityPasswordAuthentication.html

http://docs.aws.amazon.com/AWSiOSSDK/latest/Protocols/AWSSignInDelegate.html