我有這個功能:
@objc(syncUser:rejecter:)
func syncUser(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
self.cancelableSyncUser = MyService.shared?.syncingUser()
.sink(receiveCompletion: {
switch $0 {
case .failure(let error):
print("PRINT \(error)")
reject(error.localizedDescription, error.localizedDescription, error);
case .finished:
}
}, receiveValue: {
resolve($0);
})
}
我得到一個error包含一些我想使用的資訊的物件,但我無法訪問它的屬性(代碼和訊息)。
如果我列印error物件,我會得到:
PRINT syncUser(Optional(mydomain.OpenpathErrorData(err: mydomain.OpenpathErrorData.Err(message: "Error message", code: "X"))), nil)
正如我們所見,它包含code和message。
OpenpathErrorData是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.
我已經嘗試了所有方法,但要么我無法訪問它,要么我不知道正確的語法。
有任何想法嗎?我知道如果不看整個代碼就很難理解,但如果是關于語法,也許有人可以給我一個提示。
提前非常感謝。
uj5u.com熱心網友回復:
您可以使用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)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/436436.html
