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]
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)
}
}
}
Vous devez spécifier le module dans lequel rechercher le type d'objet . Appelez Alamofire.Method
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, ...
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 }
}
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.
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.
Swift 4 et Alamofire 4.7
Remplacez HTTPMethod
par Alamofire.HTTPMethod
Changez le nom du type enum en different & ...
$(inherited)
, ouCible -> 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 {
}
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.
.