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