Swift 迅速地结合。从本地服务恢复一条记录时出现问题
我开始使用swift进行编程,我对呼叫返回的本地服务有问题,例如: {“idMember”:14,“externalID”:“001996.dce”,“email”:null,“name”:“Manu”,“isActive”:true,“logDate”:“2020-12-12 12:12:12”,“logUser”:“asdasd”} 我试过这个:Swift 迅速地结合。从本地服务恢复一条记录时出现问题,swift,rest,combine,Swift,Rest,Combine,我开始使用swift进行编程,我对呼叫返回的本地服务有问题,例如: {“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
let url = URL(string: "http://localhost:8080/member/findByExternalID/001996.dce")!
let token = URLSession.shared.dataTaskPublisher(for: url)
.map { $0.data }
.decode(type: Member.self, decoder: JSONDecoder())
.sink(receiveCompletion: { completion in
print(completion)
}, receiveValue: { value in
print("service has \(value) value")
})
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 }
}
但是永远不要打印信息,服务永远不会被调用(我在服务器日志中检查它)。我想这是一个微不足道的问题。但我没有发现问题所在。
令牌是可取消的。如果它在实际联网开始之前超出范围,它将取消:这就是AnyCancelable。因此,如果token
仅仅是一个局部变量,那么您的结果就不足为奇了。您需要将token
存储在一个实例属性中,该属性可以在更高的级别上保持,足够长的时间,以便进行联网
实际上,通常的做法不是将管道分配给某个对象,而是在.sink
之后添加.store
,并将管道存储在集合
实例属性或类似属性中。如何处理可取消令牌?我看到您将其存储在标记变量中,但之后会发生什么?请注意,如果此令牌被解除分配,您的数据任务将取消。我不会对其执行任何操作。我试图简化代码以发现问题,我使用断点来观察令牌的值。我是否需要对令牌执行某些操作以刷新其值?