Thursday, October 15, 2026
HomeiOS DevelopmentHow one can merge two publishers with Mix?

How one can merge two publishers with Mix?

[ad_1]

I’ve an token writer. It returns a token worth as string. I need to make a request utilizing this token in request writer. I do not know do it. Possibly these codes will assist.

Token Transactions:

// Token Writer
func getAccessToken() -> AnyPublisher<String, Error> {
    let url = "it does not matter"
    var urlRequest = URLRequest(url: url)
    // some url request setups
    // ...
    return URLSession.shared
        .dataTaskPublisher(for: urlRequest)
        .map(.knowledge)
        .decode(sort: AccessToken.self, decoder: JSONDecoder())
        .map({ $0.token ?? "" })
        .obtain(on: DispatchQueue.major)
        .eraseToAnyPublisher()
}

Generic Request Transactions:

// Request Writer (The T is decodable generic sort.)
func request<T: Decodable>(ofType: T.Kind, apiURL: APIURL, technique: HTTPMethods) -> AnyPublisher<T, Error> {
    // This flatMap is just not invoked. :/
    AuthManager.shared.getAccessToken()
        .flatMap({ accessToken -> AnyPublisher<T, Error> in
            guard let url = URL(string: apiURL.url) else {
                return Fail(error: NSError(area: "Lacking API URL", code: -10001, userInfo: nil)).eraseToAnyPublisher()
            }
            var urlRequest = URLRequest(url: url)
            urlRequest.httpMethod = technique.rawValue
            urlRequest.setValue("Authorization", forHTTPHeaderField: "Bearer " + accessToken)
            return URLSession.shared
                .dataTaskPublisher(for: urlRequest)
                .map(.knowledge)
                .decode(sort: T.self, decoder: JSONDecoder())
                .eraseToAnyPublisher()
        }).eraseToAnyPublisher()
}

Instance Request Transactions:

// Instance Request
personal var cancellables = Set<AnyCancellable>()

func getExampleRequest(id: String) {
    let url = "it does not matter"
    APIManager.shared.request(ofType: ExampleModel.self, apiURL: url, technique: .get).sink { completion in
        swap completion {
        case .completed:
            break
        case .failure(let error):
            print(error)
        }
    } receiveValue: { exampleModelData in
        // print(exampleModelData)
    }.retailer(in: &cancellables)
}

Thanks upfront.

[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments