[英]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.