web-dev-qa-db-ja.com

Enum要素はインスタンスメンバーとして参照できません

Moyaを使用してAPIレイヤーを作成していますが、エンドポイントのリクエストを作成しているときに.updateMyWeightGoalターゲットについて上記のエラーが発生し続けます。

    goalAPI.request(target:  .updateMyWeightGoal(weightGoalData: goalInfo),  success: { (response) in
        //
    }){ (response: [String : Any]) in
        print(response)
    }

私は同じタイプの別のMoya APIを作成し、これと同じgoalAPIを使用してそれを呼び出していますが、正常に動作しています。

この問題を引き起こしている可能性のあるアイデア

参考のために、ここでは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"]
}
}

そして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
    }
}
}
11
Suman Roy

これは愚かなことです。

結局のところ、エラーは列挙型からではなく、成功ブロックからのものでした。それは私が提供しなかったMappable型のオブジェクトを期待していました。

32
Suman Roy

.updateMyWeightGoalをインスタンスメンバーとして(.)列挙型として宣言されている場合。変更してみてください:

goalAPI.request(target: .updateMyWeightGoal(weightGoalData: goalInfo)

goalAPI.request(target: GoalSettingAPI.updateMyWeightGoal(weightGoalData: goalInfo)
3
Oskar

同じエラーがありました。私の場合、問題は私が入力したことでした:

if someVariable = .AnEnumValue

私が言ったことは:

if someVariable == .AnEnumValue

主な違いは===

コンパイラがこの特定のエラーメッセージにどのように到達したかはわかりませんが、これで問題が解決しました。

1
Tim