枚举元素不能作为实例成员引用

Sum*_*Roy 11 enums ios swift objectmapper moya

我正在使用Moya创建一个API层,并.updateMyWeightGoal在创建端点请求时不断为目标获取上述错误.

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

我已经创建了另一个相同类型的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"]
}
}
Run Code Online (Sandbox Code Playgroud)

以及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
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Sum*_*Roy 32

这是最愚蠢的事情.

事实证明错误来了,不是来自枚举,而是来自成功块.它期待一个Mappable类型的对象,我没有提供.

  • 相似的事情也发生在我身上,我在三元表达式中遇到了这个错误,但这实际上是因为我忘了在第一部分中完成了比较(`int?.foo:.bar`而不是`int&gt; 0?.foo: .bar`)。就像我喜欢Swift一样,它的编译器消息仍然有很多不足之处。 (2认同)

Osk*_*kar 5

当它被声明为枚举时,您将其.updateMyWeightGoal称为实例成员 ( )。.尝试改变:

goalAPI.request(target: .updateMyWeightGoal(weightGoalData: goalInfo)
Run Code Online (Sandbox Code Playgroud)

goalAPI.request(target: GoalSettingAPI.updateMyWeightGoal(weightGoalData: goalInfo)
Run Code Online (Sandbox Code Playgroud)