对成员 Swift 3 的模糊引用



我正在将我的项目从 Swift 2.3 迁移到 Swift 3。并且如预期的那样遇到困难。

这是一个用于OAuth的

函数,使用OAuthSwift。我尝试转换

class func OAuthSwiftAuthorization(inViewController viewController: UIViewController, withOAuthInfo info:FitnessTracker, successHandler:@escaping MyOAuthNewSuccessHandler, failure: @escaping ((_ error: NSError) -> Void)) {
    let oauthswift = OAuth2Swift(
        consumerKey:    info.consumerKey,
        consumerSecret: info.consumerSecret,
        authorizeUrl:   info.authorizeUrl,
        accessTokenUrl: info.accessTokenUrl,
        responseType:   info.responseType
    )
    oauthswift.authorizeURLHandler = SafariURLHandler(viewController: viewController, oauthSwift: oauthswift)
    oauthswift.accessTokenBasicAuthentification = true
    oauthswift.allowMissingStateCheck = true
    oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in
             successHandler(credential, response, parameters)
    }) { (error) in
        failure(error: error)
        print(error.localizedDescription)
    }
}

但是我在

oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in

错误状态

对成员"authorize(withCallbackURL:scope:state:parameters:headers:success:failure:)"的不明确引用

这是 Swift 2 的工作代码。

    oauthswift.authorizeWithCallbackURL(
        URL(string: info.callBackUrl)!,
        scope: info.scope, state:info.state,
        success: { credential, response, parameters in
            successHandler(credientials: credential, response: response, params: parameters)
        },
        failure: { error in
            failure(error: error)
            print(error.localizedDescription)
        }
    )

更新:

错误没有出现 unitil I 类型成功和 faliure handelrs。这符合以下要求:

        oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in
        // successHandler(credential, response, parameters)
    }) { (erorr) in
        // failure(error: error
    }

所以请指导我谢谢。

我认为这个问题是由 Swift 的类型推断与闭包相结合的一些缺点引起的。您可以尝试以下方法之一:

要么不要使用尾随闭包,例如

oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in
         successHandler(credential, response, parameters)
}, failure: { (error) in
    failure(error: error)
    print(error.localizedDescription)
})

或为错误提供显式类型,例如

 oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in
         successHandler(credential, response, parameters)
 }) { (error: Error) in
     failure(error: error)
     print(error.localizedDescription)
 }

供参考:当有多个同名变量/方法时会出现这种错误,您的oauthswift是否有多个称为"授权"的"事物"?喜欢另一种方法?我的错误是我声明:

let fileManager = FileManager()

和在

let _ = try localFileManager.createDirectory(...) 

我遇到了同样的错误,更改了变量名称localFileManager修复了它。

我得到了同样的错误 在将成员从 Swift 4 转换为 Swift 5 时使用相同的方法对成员的模糊引用。看起来完成处理程序已更改为支持新的结果类型。将完成处理程序更改为下面为我解决了问题,

        oauthVarSwift.authorize( withCallbackURL: URL(string: "")!,
                             scope: "", state:"", completionHandler: {  result in
                                switch result {
                                case .success(let credential, let response,  let parameters):
                                    print(credential.oauthToken)
                                case .failure(let error):
                                 print(error)
                                }
          })

最新更新