iOS-合并-将发布服务器类型更改为子类型
我有两个可编码对象:iOS-合并-将发布服务器类型更改为子类型,ios,swift,combine,Ios,Swift,Combine,我有两个可编码对象: struct Parent: Codable { let name: String let children: [Child] } struct Child: Codable { let name: String } 我为匹配此json而创建的: { name: "test" children: ( { name: "test2" }, {
struct Parent: Codable {
let name: String
let children: [Child]
}
struct Child: Codable {
let name: String
}
我为匹配此json而创建的:
{
name: "test"
children: (
{
name: "test2"
},
{
name: "test3"
}
)
}
我检索json并使用以下方法将其解码为父对象:
func parent(_ url: String) -> AnyPublisher<Parent, Error> {
return dataFromURL(url)
.map(\.value)
.eraseToAnyPublisher()
}
struct Result<T> {
let value: T
let response: URLResponse
}
func dataFromURL<T: Decodable>(_ url: String, _ decoder: JSONDecoder = JSONDecoder()) -> AnyPublisher<Result<T>, Error> {
let request = URLRequest(url: URL(string:url)!)
return URLSession.shared
.dataTaskPublisher(for: request)
.tryMap { result -> Result<T> in
let value = try decoder.decode(T.self, from: result.data)
return Result(value: value, response: result.response)
}
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
}
它可以工作,但我希望有一个方法来检索子对象数组,而不是父对象,如下所示:
func children(_ url: String) -> AnyPublisher<[Child], Error>
但是我不知道我需要改变什么。。任何帮助都将不胜感激,谢谢 您只需调用父函数并调用其发布者上的map,即可获取其子属性
func children(from url: String) -> AnyPublisher<[Child], Error> {
return parent(url)
.map(\.children)
.eraseToAnyPublisher()
}
您只需调用父函数并调用其发布者上的映射即可获取其子属性
func children(from url: String) -> AnyPublisher<[Child], Error> {
return parent(url)
.map(\.children)
.eraseToAnyPublisher()
}
谢谢!有没有可能保留children方法,并使其在没有父方法的情况下工作?@Xys实际上找到了一个更简单的实现,再次更新了我的答案hanks!有没有可能保留children方法并使其在没有父方法的情况下工作?@Xys实际上找到了一个更简单的实现,再次更新了我的答案