gpt4 book ai didi

json - 如何在函数中实现泛型对协议(protocol)的条件一致性?

转载 作者:行者123 更新时间:2023-11-28 07:46:15 24 4
gpt4 key购买 nike

我在 swift 中有一个基本的网络功能,如下所示:

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()
}

我想有条件地对可解码协议(protocol)进行通用确认。它应该在泛型确认为 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")}

关于json - 如何在函数中实现泛型对协议(protocol)的条件一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50958319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com