枚举元素不能作为实例成员引用
Enum element cannot be referenced as an instance member
我正在使用 Moya 创建一个 API 层,并且在为端点创建请求时不断收到上述针对 .updateMyWeightGoal
目标的错误。
goalAPI.request(target: .updateMyWeightGoal(weightGoalData: goalInfo), success: { (response) in
//
}){ (response: [String : Any]) in
print(response)
}
我创建了另一个相同类型的 Moya API 并使用与此相同的 goalAPI
调用它并且它工作正常。
任何可能导致此问题的想法
此处供参考的是 weightGoalData
类型
的 class 定义
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
}
}
}
当 .updateMyWeightGoal
声明为枚举时,您指的是实例成员 (.
)。尝试更改:
goalAPI.request(target: .updateMyWeightGoal(weightGoalData: goalInfo)
至
goalAPI.request(target: GoalSettingAPI.updateMyWeightGoal(weightGoalData: goalInfo)
这是最愚蠢的事情。
事实证明错误不是来自枚举,而是来自成功块。它需要一个 Mappable 类型的对象,但我没有提供。
有同样的错误。就我而言,问题是我输入了:
if someVariable = .AnEnumValue
我的意思是:
if someVariable == .AnEnumValue
关键区别在于 =
与 ==
。
不确定编译器是如何找到这个特定错误消息的,但这解决了问题。
我正在使用 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
}
}
}
当 .updateMyWeightGoal
声明为枚举时,您指的是实例成员 (.
)。尝试更改:
goalAPI.request(target: .updateMyWeightGoal(weightGoalData: goalInfo)
至
goalAPI.request(target: GoalSettingAPI.updateMyWeightGoal(weightGoalData: goalInfo)
这是最愚蠢的事情。
事实证明错误不是来自枚举,而是来自成功块。它需要一个 Mappable 类型的对象,但我没有提供。
有同样的错误。就我而言,问题是我输入了:
if someVariable = .AnEnumValue
我的意思是:
if someVariable == .AnEnumValue
关键区别在于 =
与 ==
。
不确定编译器是如何找到这个特定错误消息的,但这解决了问题。