Swift 并合并。从本地服务恢复一条记录时出现问题

Swift and Combine. Problems when I recover one record from a local service

我开始使用 swift 进行编程,但在调用 returns 的本地服务时遇到问题,例如:

{"idMember":14,"externalID":"001996.dce","email":null,"name":"Manu","isActive":true,"logDate":"2020 -12-12 12:12:12","logUser":"asdasd"}

我试过这个:

let url = URL(string: "http://localhost:8080/member/findByExternalID/001996.dce")!
let token = URLSession.shared.dataTaskPublisher(for: url)
           .map { [=11=].data }
           .decode(type: Member.self, decoder: JSONDecoder())
           .sink(receiveCompletion: { completion in
              print(completion)
            }, receiveValue: { value in
               print("service has \(value) value")
           })

Member.swift:

struct Member: Codable, Identifiable {
var id = UUID()
let idMember:Int
var name:String
    
var logDate:Date
var logUser:String

var externalID:String
var email:String
var isActive:Bool

enum CodingKeys: String, CodingKey {
    case idMember, name,  logDate,  logUser,  externalID, email, isActive }
}

但从不打印信息,从不调用该服务(我在服务器日志中检查过)。我想这是一个微不足道的问题。但是我没发现什么问题。

token 是 AnyCancellable。如果它在实际网络有机会开始之前超出范围,它 取消:这就是 AnyCancellable。因此,如果 token 只是一个局部变量,您的结果就不足为奇了。您需要将 token 存储在一个实例 属性 中,该实例 属性 可以在更高级别持续存在,足够长的时间以进行网络连接。

通常的事情,实际上,不是将管道分配给某个东西,而是在.sink之后添加.store并将管道存储在Set<AnyCancellable>实例中属性,或类似的。