title: Access variables from App Delegate in View Controller
body: <p>I am implementing Google sign in on my app and I need to access the User ID and first/last name. The variables storing that data are in the App Delegate. I have searched the internet inside and out looking for how to do this in Swift 3, and there is absolutely nothing.</p>
  
  <p>Here's the App Delegate (at least the part that matters):</p>
  
  <pre><code>class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
  
  var window: UIWindow?
  var databaseRef: FIRDatabaseReference!
  
  var userID = String()
  var givenName = String()
  var familyName = String()
  
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -&gt; Bool {
      // Override point for customization after application launch.
  
      // Use Firebase library to configure APIs
      FIRApp.configure()
  
      GIDSignIn.sharedInstance().clientID = FIRApp.defaultApp()?.options.clientID
      GIDSignIn.sharedInstance().delegate = self
  
      return true
  }
  
  func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -&gt; Bool {
  
      return GIDSignIn.sharedInstance().handle(url,
                                               sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                               annotation: options[UIApplicationOpenURLOptionsKey.annotation])
  }
  
  func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
  
      if let error = error {
          print(error.localizedDescription)
          return
      }
      print("User signed into Google")
  
      let authentication = user.authentication
      let credential = FIRGoogleAuthProvider.credential(withIDToken: (authentication?.idToken)!,
                                                        accessToken: (authentication?.accessToken)!)
  
      FIRAuth.auth()?.signIn(with: credential) { (user, error) in
          print("User Signed Into Firebase")
  
  
          self.databaseRef = FIRDatabase.database().reference()
  
          self.databaseRef.child("user_profiles").child(user!.uid).observeSingleEvent(of: .value, with: { (snapshot) in
  
              let snapshot = snapshot.value as? NSDictionary
  
              if(snapshot == nil)
              {
                  self.databaseRef.child("user_profiles").child(user!.uid).child("name").setValue(user?.displayName)
                  self.databaseRef.child("user_profiles").child(user!.uid).child("email").setValue(user?.email)
              }
  
  
          })
  
      }
  
      userID = user.userID
      givenName = user.profile.givenName
      familyName = user.profile.familyName
  
  
      continueToWallet()
  }
  </code></pre>
  
  <p>In the View Controller, I am calling the App delegate and trying to receive the data, but it gives me an error saying, "Instance member 'User ID' cannot be used on type 'AppDelegate'"</p>
  
  <pre><code>class addToWalletController: UIViewController {
  
  var ID = String()
  
  let delegate = UIApplication.shared.delegate as! AppDelegate
  let user = AppDelegate.userID
  let firstName = AppDelegate.givenName
  let lastName = AppDelegate.familyName
  
  override func viewDidLoad() {
      super.viewDidLoad()
  }
  
  }
  </code></pre>
  
  <p>I have also tried switching AppDelegate with delegate in the =AppDelegate.userID but it gives me the same error. What's going on?</p>