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>
实例中属性,或类似的。
我开始使用 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>
实例中属性,或类似的。