web-dev-qa-db-fra.com

L'élément Enum ne peut pas être référencé en tant que membre d'instance

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
    }
}
}
7
Suman Roy

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.

22
Suman Roy

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)
2
Oskar

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.

0
Tim