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)
我们可以看到,它包含code
和message
。
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
的情况,同时我们还将枚举案例的关联值分配给两个(可选)变量 errorData
和 otherError
然后您可以在您的代码中使用。
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)
}
}
我有这个功能:
@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)
我们可以看到,它包含code
和message
。
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
的情况,同时我们还将枚举案例的关联值分配给两个(可选)变量 errorData
和 otherError
然后您可以在您的代码中使用。
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)
}
}