2015-11-05 8 views
41

Ich benutze Alamofire für die Netzwerkbehandlung in Swift und run in einen seltsamen Fehler. Es scheint, als könnten wir Methode Enum als Parameter nicht übergeben.
[Fehler ist auf Methodenparameter]'Methode' ist mehrdeutig für die Typsuche in diesem Zusammenhang, Fehler in Alamofire

enter image description here

private func apiRequest(method: Method, url: String, apiData: [String : AnyObject], completion:(finished: Bool, response: AnyObject?) ->Void) { 

    Alamofire.request(method, url, parameters: apiData).responseJSON{ response in 
     if let JSON = response.result.value { 
      completion(finished: true, response: JSON) 
     } else { 
      completion(finished: false, response:nil) 
     } 
    } 
} 
+1

Verwenden Sie qualifizierten Namen, z. 'Alamofire.Method' wenn es eine Namenskollision gibt. Sie tun dies bereits für die "Anfrage" -Funktion. – Sulthan

Antwort

60

Sie haben das Modul angeben, von dem Objekttyp Nachschlag. Anruf Alamofire.Method

10

Es ist wahrscheinlich eine Namenskollision. Um es zu lösen, können Sie den qualifizierten Namen des enum (einschließlich dem Modulnamen) verwenden:

private func apiRequest(method: Alamofire.Method, ... 
0

Während die Antwort auf diese Frage die Build-Fehler haben zu beheben; In meinem Fall war die Datei mit der Warnung in zwei verschiedenen Frameworks, so dass Xcode nicht wusste, wo es gesucht werden musste. Dies war nicht das beabsichtigte Verhalten unserer internen Frameworks, also entfernte ich einfach die Kopie, die ich nicht länger wollte.

1

Sie können eine Klasse an zwei oder mehr Stellen in Ihrer Anwendung deklariert haben. Der Fehler besagt, dass es keine abschließende Möglichkeit gibt, diese Klasse zu verwenden, da es im Code mehrere Stellen gibt, an denen sie deklariert wird.

3

Ich habe auch dieses Problem gestoßen, weil ich eine Reihe mit dem gleichen Namen des Protokolls erklärt habe:

protocol SomeProtocol { 
    static func someTypeMethod() 
} 

protocol SomeProtocol { 
    init(someParameter: Int) 
} 

protocol SomeProtocol { 
    var mustBeSettable: Int { get set } 
    var doesNotNeedToBeSettable: Int { get } 
} 
0

Der Typ Method wird in zwei importierten Module erklärt. Sie müssen das Modul angeben, von dem der Typ verwendet werden soll. Verwenden Sie Alamofire.Method anstelle von Method.

Tipp: Wenn Sie die Art häufig verwenden, können Sie eine Art Alias ​​in Ihrem Modul erstellen (Anwendung):

typealias Method = Almofire.Method 

diese Weise werden Sie nicht den Typ mit Almofire. mehr Präfix müssen .

Verwandte Themen