Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 迅速地结合。从本地服务恢复一条记录时出现问题_Swift_Rest_Combine - Fatal编程技术网

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

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

我开始使用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/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
,并将管道存储在
集合
实例属性或类似属性中。

如何处理可取消令牌?我看到您将其存储在
标记
变量中,但之后会发生什么?请注意,如果此令牌被解除分配,您的数据任务将取消。我不会对其执行任何操作。我试图简化代码以发现问题,我使用断点来观察令牌的值。我是否需要对令牌执行某些操作以刷新其值?