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
}
}
}
これは愚かなことです。
結局のところ、エラーは列挙型からではなく、成功ブロックからのものでした。それは私が提供しなかったMappable型のオブジェクトを期待していました。
.updateMyWeightGoal
をインスタンスメンバーとして(.
)列挙型として宣言されている場合。変更してみてください:
goalAPI.request(target: .updateMyWeightGoal(weightGoalData: goalInfo)
に
goalAPI.request(target: GoalSettingAPI.updateMyWeightGoal(weightGoalData: goalInfo)
同じエラーがありました。私の場合、問題は私が入力したことでした:
if someVariable = .AnEnumValue
私が言ったことは:
if someVariable == .AnEnumValue
主な違いは=
対==
。
コンパイラがこの特定のエラーメッセージにどのように到達したかはわかりませんが、これで問題が解決しました。