Skip to main content
AI Assist is now on Stack Overflow. Start a chat to get instant answers from across the network. Sign up to save and share your chats.
more tags
Link
Vadim Kotov
  • 8.3k
  • 8
  • 51
  • 63
added 4 characters in body
Source Link
Lex
  • 320
  • 1
  • 11

upd2:
Xcode 11 GM - waitsForConnectivity is working but onlyONLY on device. Use default session, set the flag and implement session delegate. Method task is waiting for connectivity will be invoked no matter if u r using init task with callback or without.

upd2:
Xcode 11 GM - waitsForConnectivity is working but only on device. Use default session, set the flag and implement session delegate. Method task is waiting for connectivity will be invoked no matter if u r using init task with callback or without.

upd2:
Xcode 11 GM - waitsForConnectivity is working but ONLY on device. Use default session, set the flag and implement session delegate. Method task is waiting for connectivity will be invoked no matter if u r using init task with callback or without.

added 262 characters in body
Source Link
Lex
  • 320
  • 1
  • 11
public class DriverService: NSObject, ObservableObject { public var decoder = JSONDecoder() public private(set) var isOnline = CurrentValueSubject<Bool, Never>(true) private var subs = Set<AnyCancellable>() private var base: URLComponents private lazy var session: URLSession = { let config = URLSessionConfiguration.default config.waitsForConnectivity = true return URLSession(configuration: config, delegate: self, delegateQueue: nil) }() public init(host: String, port: Int) { base = URLComponents() base.scheme = "http" base.host = host base.port = port super.init() // Simulate online/offline state // // let pub = Timer.publish(every: 3.0, on: .current, in: .default) // pub.sink { _ in // let rnd = Int.random(in: 0...1) // self.isOnline.send(rnd == 1) // }.store(in: &subs) // pub.connect() } public func publisher<T>(for driverRequest: Request<T>) -> AnyPublisher<T, Error> { var components = base components.path = driverRequest.path var request = URLRequest(url: components.url!) request.httpMethod = driverRequest.method return Future<(data: Data, response: URLResponse), Error> { (complete) in let task = self.session.dataTask(with: request) { (data, response, error) in if let err = error { complete(.failure(err)) } else { complete(.success((data!, response!))) } self.isOnline.send(true) } task.resume() } .map({ $0.data }) .decode(type: T.self, decoder: decoder) .eraseToAnyPublisher() } } extension DriverService: URLSessionTaskDelegate { public func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) { self.isOnline.send(false) } } 
public class DriverService: NSObject, ObservableObject { public var decoder = JSONDecoder() public private(set) var isOnline = CurrentValueSubject<Bool, Never>(true) private var subs = Set<AnyCancellable>() private var base: URLComponents private lazy var session: URLSession = { let config = URLSessionConfiguration.default config.waitsForConnectivity = true return URLSession(configuration: config, delegate: self, delegateQueue: nil) }() public init(host: String, port: Int) { base = URLComponents() base.scheme = "http" base.host = host base.port = port super.init() // Simulate online/offline state // // let pub = Timer.publish(every: 3.0, on: .current, in: .default) // pub.sink { _ in // let rnd = Int.random(in: 0...1) // self.isOnline.send(rnd == 1) // }.store(in: &subs) // pub.connect() } public func publisher<T>(for driverRequest: Request<T>) -> AnyPublisher<T, Error> { var components = base components.path = driverRequest.path var request = URLRequest(url: components.url!) request.httpMethod = driverRequest.method return Future<(data: Data, response: URLResponse), Error> { (complete) in let task = self.session.dataTask(with: request) { (data, response, error) in if let err = error { complete(.failure(err)) } else { complete(.success((data!, response!))) } self.isOnline.send(true) } task.resume() } .map({ $0.data }) .decode(type: T.self, decoder: decoder) .eraseToAnyPublisher() } } extension DriverService: URLSessionTaskDelegate { public func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) { self.isOnline.send(false) } } 
added 262 characters in body
Source Link
Lex
  • 320
  • 1
  • 11
Loading
added 201 characters in body
Source Link
Lex
  • 320
  • 1
  • 11
Loading
Source Link
Lex
  • 320
  • 1
  • 11
Loading