web-dev-qa-db-fra.com

'Méthode' est ambiguë pour la recherche de type dans ce contexte, Erreur dans Alamofire

J'utilise Alamofire pour la gestion du réseau dans Swift et rencontre une erreur étrange. Il semble que nous ne pouvons pas passer  Méthode  enum en paramètre.
[Erreur est sur le paramètre de méthode]

 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)
        }
    }
}
49
Ravi Prakash

Vous devez spécifier le module dans lequel rechercher le type d'objet . Appelez Alamofire.Method

73
harpreetSingh

Il y a probablement une collision de noms. Pour le résoudre, vous pouvez utiliser le nom qualifié de enum (y compris le nom du module):

private func apiRequest(method: Alamofire.Method, ...
11
Sulthan

J'ai également rencontré ce problème, car j'ai déclaré un numéro du même nom du protocole:

protocol SomeProtocol {
   static func someTypeMethod()
}

protocol SomeProtocol {
   init(someParameter: Int)
}

protocol SomeProtocol {
   var mustBeSettable: Int { get set }
   var doesNotNeedToBeSettable: Int { get }
}
6
ylgwhyh

Vous pouvez avoir une classe déclarée à deux endroits ou plus dans votre application. L'erreur est qu'il n'y a pas de manière concluante d'utiliser cette classe car il y a deux endroits différents dans le code où elle est déclarée.

1
Brooks Hanes

Bien que la réponse à cette question ait résolu l'erreur de construction; dans mon cas, le fichier contenant l'avertissement se trouvait dans deux cadres différents, de sorte que Xcode ne savait pas où chercher. Ce n'était pas le comportement prévu de nos frameworks internes, j'ai donc simplement supprimé la copie dont je ne voulais plus.

0
nitsyrk

Swift 4 et Alamofire 4.7

Remplacez HTTPMethod par Alamofire.HTTPMethod

0
dimo hamdy

Changez le nom du type enum en different & ...

  • Utilisez le drapeau $(inherited), ou
  • Supprimez les paramètres de construction de la cible.

Cible -> Paramètres de construction-> ALWAYS_EMBED_Swift_STANDARD_LIBRARIES, Le type de valeur est Booléen, cliquez sur l’autre, remplacez la valeur par $ (hérité) Perform - pod update Terminé

puis essayez d'exécuter votre projet, l'erreur disparaîtra! (J'ai essayé dans mon projet)

énumération 'XYZ'ButtonType {

}

0
vimal patel

Le type Method est déclaré dans deux modules importés. Vous devez spécifier le module à partir duquel utiliser le type. Utilisez Alamofire.Method au lieu de Method.

Astuce : Si vous utilisez souvent le type, vous pouvez créer un alias de type dans votre module (application):

typealias Method = Alamofire.Method

De cette façon, vous n'aurez plus besoin de préfixer le type avec Alamofire..

0
Marián Černý