Je crée une couche d'API à l'aide de Moya et continue à obtenir l'erreur mentionnée ci-dessus pour la cible .updateMyWeightGoal
lorsque je crée une demande pour un noeud final.
goalAPI.request(target: .updateMyWeightGoal(weightGoalData: goalInfo), success: { (response) in
//
}){ (response: [String : Any]) in
print(response)
}
J'ai créé une autre API Moya du même type et je l'appelle en utilisant la même variable goalAPI
que cela, et tout fonctionne correctement.
Toutes les idées qui pourraient causer ce problème
Pour référence, voici la définition de classe pour le type weightGoalData
class UpdatedWeightGoalInfo: Mappable {
var consumerUserID: Int?
var height: String?
var weight: String?
var goalWeight: String?
init() {
}
convenience init(userId: Int, weightGoalData: WeightGoalResponse) {
self.init()
consumerUserID = userId
height = "\(weightGoalData.currentHeight)"
weight = "\(weightGoalData.currentWeight)"
goalWeight = "\(weightGoalData.goalWeight)"
}
required init?(map: Map) {
}
func mapping(map: Map) {
consumerUserID <- map["consumerUserId"]
height <- map["height"]
weight <- map["weight"]
goalWeight <- map["goalWeight"]
}
}
Et la définition de l'API:
enum GoalSettingAPI: AccessTokenAuthorizable {
case updateMyWeightGoal(weightGoalData: UpdatedWeightGoalInfo)
}
extension GoalSettingAPI: TargetType {
var parameterEncoding: ParameterEncoding {
switch self {
default:
return JSONEncoding.default
}
}
var baseURL: URL { return URL(string: appBaseURL + "*hidden*/")! }
var path: String {
switch self {
case .updateMyWeightGoal(_):
return "updateMyWeightGoal"
}
}
var method: Moya.Method {
switch self {
case .updateMyWeightGoal(_):
return .post
}
}
var parameters: [String: Any]? {
switch self {
case .updateMyWeightGoal(let weightGoalData):
return weightGoalData.toJSON()
}
}
var sampleData: Data {
switch self {
default:
return Data()
}
}
var task: Task {
switch self {
default:
return .request
}
}
var shouldAuthorize: Bool {
switch self {
default:
return false
}
}
}
C'est la chose la plus stupide.
Comme il s'est avéré que l'erreur venait, pas de l'enum, mais du bloc de succès. Il attendait un objet de type Mappable, que je ne fournissais pas.
Vous faites référence à .updateMyWeightGoal
en tant que membre d'instance (.
) lorsqu'il est déclaré enum. Essayez de changer:
goalAPI.request(target: .updateMyWeightGoal(weightGoalData: goalInfo)
À
goalAPI.request(target: GoalSettingAPI.updateMyWeightGoal(weightGoalData: goalInfo)
Eu la même erreur. Dans mon cas, le problème était que j'avais tapé:
if someVariable = .AnEnumValue
Ce que je voulais dire était:
if someVariable == .AnEnumValue
La principale différence est =
vs ==
.
Vous ne savez pas comment le compilateur a atterri sur ce message d'erreur particulier, mais cela a résolu le problème.