Swift 访问枚举参数

Swift access enum param

我有这个功能:

@objc(syncUser:rejecter:)
  func syncUser(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
    self.cancelableSyncUser = MyService.shared?.syncingUser()
      .sink(receiveCompletion: {
        switch [=11=] {
        case .failure(let error):
          print("PRINT \(error)")
          reject(error.localizedDescription, error.localizedDescription, error);
        case .finished:
          
        }
      }, receiveValue: {
        resolve([=11=]);
      })
  }

我得到一个 error 对象,其中包含一些我想使用的信息,但我无法访问它的属性(代码和消息)。

如果我打印 error 对象,我会得到:

PRINT syncUser(Optional(mydomain.OpenpathErrorData(err: mydomain.OpenpathErrorData.Err(message: "Error message", code: "X"))), nil)

我们可以看到,它包含codemessage

OpenpathErrorData 是在另一个 class:

中定义的 enum
  enum OpenpathError: Error {
    case syncUser(OpenpathErrorData?, Error?)
  }
struct OpenpathErrorData: Codable {
  struct Err: Codable {
    var message:String
    var code:String
  }
  var err: Err
}

问题是我无法访问这些属性。我只能访问 error.localizedDescription.

我已经尝试了所有方法,但要么我无法访问它,要么我不知道正确的语法。

有什么想法吗?我知道不看完整代码很难理解,但如果是关于语法的,也许有人可以给我提示。

非常感谢。

您可以使用if case ...访问错误结构的内容。

if case let OpenpathError.syncUser(errorData, otherError) = error 

有了这个,我们检查 error 是否属于 .synchUser 的情况,同时我们还将枚举案例的关联值分配给两个(可选)变量 errorDataotherError 然后您可以在您的代码中使用。

if case let OpenpathError.syncUser(errorData, otherError) = error {

    if let errorData = errorData {
        print(errorData.err.message, errorData.err.code)
    }

    if let otherError = otherError {
        print(otherError)
    }
}