0
import StoreKit
 
class AppleMusicAPI {
  let developerToken = "ABC123"

  func getUserToken() -> String {
    var userToken = String()
    SKCloudServiceController().requestUserToken(forDeveloperToken: developerToken) { (receivedToken, error) in
      userToken = receivedToken!
    }
    return userToken
  }
}

I'm trying to basically return the userToken by doing AppleMusicAPI().getUserToken() however nothing gets returned (literally just blank/empty).

How can I output the token as a string?

Shpigford
  • 24,748
  • 58
  • 163
  • 252

1 Answers1

0

If you take a look a the method signature that you're calling, it looks like this: open func requestUserToken(forDeveloperToken developerToken: String, completionHandler: @escaping (String?, Error?) -> Void)

Notice the @escaping keyword which indicates that the completion block is not necessarily called right away (asynchronous). To fix your issue, I'd suggest using something like this:

class AppleMusicAPI {
    let developerToken = "ABC123"

    func getUserToken(completion: @escaping (String?, Error?) -> Void) {
        SKCloudServiceController().requestUserToken(forDeveloperToken: developerToken, completionHandler: completion)
    }
}
henrik-dmg
  • 1,448
  • 16
  • 23