[ad_1]
I’ve a closure to retrieve a token string:
var getAccessToken = { () -> (String) in
var token = String("")
credentialsManager.credentials(minTTL: 60) { end in
swap outcome {
case .success(let credentials):
token = credentials.accessToken
case .failure(let error):
token = ""
}
}
return token
}
Once I name getAccessToken() from one other perform like beneath, it at all times returns empty, because it does not look forward to credentialsManager.credentials closure to return:
func getUserProfile(completion: @escaping (UserProfile) -> ()) {
let accessToken = getAccessToken()
let url = URL(string: "https://asdf.com")!
enum DataTaskError: Error {
case invalidResponse, rateLimited, serverBusy
}
var request = URLRequest(url: url)
request.addValue("Bearer (accessToken)", forHTTPHeaderField: "Authorization")
request.addValue("software/json", forHTTPHeaderField: "Content material-Kind")
URLSession.shared.dataTask(with: request) { (knowledge, _, _) in
guard let knowledge = knowledge else { return }
do {
let userProfile = strive JSONDecoder().decode(UserProfile.self, from: knowledge)
DispatchQueue.primary.async {
completion(userProfile)
}
} catch {
print(error.localizedDescription)
}
}
.resume()
}
I attempted utilizing a completion handler with getAccessToken:
func getAccessToken(completion: @escaping () -> (String)) {
//...
completion(token)
}
however Swift errored: Argument handed to name that takes no arguments
[ad_2]
