web-dev-qa-db-fra.com

Référence ambiguë au membre Swift 3

Je migre mon projet de Swift 2.3 à Swift 3. Et rencontre des difficultés comme prévu. 

Voici une fonction utilisée pour OAuth en utilisant OAuthSwift . J'ai essayé de convertir

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)
    }
}

Mais je reçois une erreur à 

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

États d'erreur

Référence ambiguë au membre 'authorize (withCallbackURL: scope: state: parameters: en-têtes: success: failure :)

Voici le code de travail de 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)
        }
    )

METTRE À JOUR:

Une erreur ne semble pas apparaître lorsque je tape succès et succès. Cela se conforme bien:

        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
    }

Alors s'il vous plaît guidez-moi Merci.

11
Umair Afzal

Je pense que le problème est causé par certaines lacunes de l'inférence de type de Swift associée à des fermetures ... Vous pouvez essayer l'une des solutions suivantes:

N'utilisez pas les fermetures de fin, par exemple.

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)
})

ou fournissez un type explicite pour l'erreur, par ex.

 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)
 }
12
Andreas Oetjen

Pour référence: Ce type d'erreur apparaît lorsqu'il y a plus d'une variable/méthode portant le même nom, votre oauthswift a-t-il plus d'une "chose" appelée "autoriser"? comme une autre méthode? Mon erreur a été que j'ai déclaré:

let fileManager = FileManager()

et en 

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

J'ai eu la même erreur, changer le nom de la variable dans localFileManager l'a corrigé.

0
Kappe