2016-10-21 2 views
0

Bitte schließen Sie nicht wegen des Duplikats von "Mehrdeutige Verwendung von ...". Trotz intensiver Recherche konnte ich keine ähnlichen Threads finden, die mein Problem lösen.Swift 3/Wie zu lösen: "Mehrdeutige Verwendung von 'authorize (_: completion :)'"

Ich bin ein Projekt Swift 3 Aktualisierung und bin an einem Compiler-Fehler fest:

Ambiguous use of 'authorize(_:completion:)'

Code:

func connectToInstagram() { 

    let auth: NSMutableDictionary = ["client_id": INSTAGRAM_CLIENT_ID, 
            SimpleAuthRedirectURIKey: INSTAGRAM_REDIRECT_URI] 

    SimpleAuth.configuration()["instagram"] = auth 

    SimpleAuth.authorize("instagram") { (anyObject, error) in // error here 

     if anyObject != nil {... 

SimpleAuth ist ein Rahmen Social Media-Authentifizierung in Objective geschrieben zu handhaben C.

SimpleAuth:

open class SimpleAuth : NSObject { 

    open class func authorize(_ provider: String!, completion: SimpleAuth.SimpleAuthRequestHandler!) 

enter image description here

SimpleAuthRequestHandler:

public typealias SimpleAuthRequestHandler = (Any?, Error?) -> Swift.Void 

public let SimpleAuthPresentInterfaceBlockKey: String 
public let SimpleAuthDismissInterfaceBlockKey: String 

enter image description here

Ich habe versucht, die Linie zu ändern:

_ = SimpleAuth.authorize("instagram") { (anyObject: Any?, error: Error?) in 

_ = SimpleAuth.authorize("instagram", completion: { (anyObject: Any?, error: Error?) in 

Aber wie erwartet, es hat sich nicht verändert alles . Was vermisse ich? Hilfe wird sehr geschätzt.

Build Log:

enter image description here

xy/InstagramVC.swift:409:9: error: ambiguous use of 'authorize(_:completion:)' 
     SimpleAuth.authorize("instagram") { (any: Any?, error: Error?) -> Swift.Void in 
     ^
SimpleAuth.SimpleAuth:24:21: note: found this candidate 
    open class func authorize(_ provider: String!, completion: SimpleAuth.SimpleAuthRequestHandler!) 
        ^
SimpleAuth.SimpleAuth:34:21: note: found this candidate 
    open class func authorize(_ provider: String!, options: [AnyHashable : Any]! = [:], completion: SimpleAuth.SimpleAuthRequestHandler!) 
+0

Versuchen Sie, Build-Protokoll zu überprüfen, oder einfach nur von der Befehlszeile aus erstellen. Soweit ich mich erinnere Compiler kann Ihnen die Liste der Täter, die die Ambiguität produzieren. – courteouselk

+0

@AntonBronnikov Ich habe die Frage mit den Build-Log-Informationen bearbeitet –

+0

Korrigieren Sie mich, wenn ich falsch liege, aber es gibt eine Mehrdeutigkeit b/w diese beiden Methoden (die mit Optionen Optionen hat einen Standardwert, so kann es reduziert werden zu genau der gleichen Signatur wie die andere).Versuchen Sie, den Standardwert zu entfernen (dieses Bit: '= [:]'), – courteouselk

Antwort

1

Das Problem ist mit der API. Sie bieten diese beiden Funktionen:

open class func authorize(_ provider: String!, completion: SimpleAuth.SimpleAuthRequestHandler!)

und

open class func authorize(_ provider: String!, options: [AnyHashable : Any]! = [:], completion: SimpleAuth.SimpleAuthRequestHandler!)

aber wie Sie das options Argument der zweiten Funktion sehen kann, ist ein Standard-Argument angegeben wurde ([:]). Wenn Sie also nicht den Parameter options angeben, kann der Compiler nicht angeben, welche Funktion Sie aufrufen möchten.

Dies bedeutet, dass die erste Funktion nicht verwendet werden kann. Sie müssen immer die zweite Funktion verwenden und ein explizites options Argument übergeben. Also:

authorize("instagram", options: [:]) { (any: Any?, error: Error?) -> Void in ... }

Es ist wahrscheinlich wert Einreichung einen Fehler mit dem SimpleAuth Rahmen Autor (en).

Verwandte Themen