2015-11-05 12 views
41

Sto utilizzando Alamofire per la gestione della rete in swift ed eseguo un errore strano. Sembra che non possiamo passare il metodo metodo come parametro.
[Errore è accesa parametro Metodo]'Metodo' è ambiguo per la ricerca del tipo in questo contesto, Errore 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

Utilizzare il nome qualificato, ad es. 'Alamofire.Method' se c'è una collisione di nome. Lo stai già facendo per la funzione 'request'. – Sulthan

risposta

60

È necessario specificare il modulo da cui di ricercare tipo di oggetto. Chiama Alamofire.Method

10

Probabilmente c'è una collisione di nome. Per risolverlo, è possibile utilizzare il nome qualificato del enum (compreso il nome del modulo):

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

Mentre la risposta a questa ha fatto correggere l'errore di compilazione; nel mio caso, il file che mostrava l'avvertimento era in due quadri diversi, quindi Xcode non sapeva dove cercare. Questo non era il comportamento previsto dei nostri framework interni, quindi ho semplicemente rimosso la copia che non desideravo più.

1

È possibile che una classe sia dichiarata in due o più posizioni nell'applicazione. L'errore sta dicendo che non esiste un modo conclusivo per usare questa classe perché ci sono un paio di posti diversi nel codice che è stato dichiarato.

3

Ho anche riscontrato questo problema, perché ho dichiarato un numero con lo stesso nome del protocollo:

protocol SomeProtocol { 
    static func someTypeMethod() 
} 

protocol SomeProtocol { 
    init(someParameter: Int) 
} 

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

Il tipo Method è dichiarata in due moduli importati. Devi specificare il modulo da cui utilizzare il tipo. Utilizzare Alamofire.Method anziché Method.

Suggerimento: Se si utilizza il tipo spesso, è possibile creare un tipo alias nel modulo (applicazione):

typealias Method = Almofire.Method 

In questo modo non sarà necessario anteporre il tipo con Almofire. più .

Problemi correlati