簡體   English   中英

如何在函數中實現泛型對協議的條件一致性?

[英]How to implement conditional conformance of a generic to a protocol in a function?

我迅速提供了基本的聯網功能,如下所示:

func fetchObject<T: Decodable>(from url: URL, completion: @escaping (T) -> ()) {

    URLSession.shared.dataTask(with: url) { (data, _, _) in

        guard let data = data else { return }

        if let object = try? JSONDecoder().decode(T.self, from: data) {
            completion(object)
        }
    }.resume()
}

我想有條件地對可解碼協議進行通用確認。 當when泛型確認為Decodable時,它應該返回該對象,否則返回json序列化的對象。 如下所示:

func fetchObject(from url: URL, completion: @escaping (Any) -> ()) {

    URLSession.shared.dataTask(with: url) { (data, _, _) in

        guard let data = data else { return }

        if let object = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) {
            completion(object)
        }
    }.resume()
}

如何為這兩種情況編寫通用函數?

我一直在嘗試一些可能有用的運行時類型一致性檢查。

1。

if let _ = object.self as? Decodable.Type {
                    print("\(object) conforms")
                }else {
                    print("\(object) does not conform")
                }

2。

        guard let data = data else { return }
           let myType = type(of: data)
           if myType.self == Decodable.Type.self {
                print("it's conforming")
            }else 
                {print ("it's not conforming")}

暫無
暫無

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

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