簡體   English   中英

檢查通用組合發布器的類型 Output Swift

[英]Check type of generic Combine Publisher Output Swift

我有一個 function 從我的服務器訪問數據。 服務器可以返回Player類型的 JSON object :

{"id":"6B38EF76-6BBC-4423-BCB6-FD9F9B5E7A6F","ign":"Shard","region":"eu","rating":1000}

Standard Response類型:

{"statusCode":4,"description":"Invalid Arguments"}

我有一個 function 具有以下模式:

fetch<T: Decodable>(from endpoint: Endpoint) -> AnyPublisher<T, DatabaseError>

此 function 通過數據任務發布者訪問服務器,並使用 combine 的內置解碼運算符將結果解碼為通用 T:

.decode(type: T.self, decoder: JSONDecoder())

我有上面顯示的兩種類型的響應,它們被建模為具有相關編碼鍵等的結構,這部分代碼工作正常。

我在不同的 function 中使用 fetch function 將其傳遞給相關端點

func getPlayerDetails(of id: UUID) -> AnyPublisher<Player, DatabaseError> {
    return fetch(from: .getDetails(of: id, isTeam: false))
}

如您所見,此 function 返回發布者, Player為 output。 我的問題是如何檢查fetch(from:)的通用 output 以及如果它是玩家 object,通過它,如果不返回我的自定義錯誤DatabaseError

謝謝

好的,所以我想出了如何解決我的問題,這並不能真正回答原始問題,但是鏈接在很大程度上解決了它。

我最后使用的解決方案是先檢查我的數據任務的狀態碼。 我的服務器端代碼配置為,當發送第一個 JSON 時狀態代碼為 200,如果發送第二個 JSON,則狀態代碼為 500。 這意味着如果狀態碼顯示它將被發送,我可以簡單地解碼第二個 JSON。

謝謝你的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM