Доступ к строковой переменной из другого представления в Swift? - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно получить SpotifyAccessToken из моего LoginViewController в мой GuestPartyViewController.

 class LoginViewController: UIViewController {

 @IBOutlet weak var spotifyLoginBtn: UIButton!

var spotifyId = ""
var spotifyDisplayName = ""
var spotifyEmail = ""
var spotifyAvatarURL = ""
var spotifyAccessToken = ""

override func viewDidLoad() {
    super.viewDidLoad()
    spotifyLoginBtn.layer.cornerRadius = 10.0
}

И мне нужно использовать эту переменную в searchURL моего GuestPartyViewController.

     import UIKit
 import Alamofire
 import AVFoundation
 class GuestPartyViewController: UIViewController {


@IBOutlet weak var partyNameLabel: UILabel!
var partyName: String?
@IBOutlet weak var partyDescriptionLabel: UILabel!
var partyDescription: String?
@IBOutlet var searchBar: UISearchBar!
var spotifyAccessToken: String?

var searchURL = "https://api.spotify.com/v1/search?q=Kanye%20West&type=track&access_token=\(spotifyAccessToken)" // The error here is: Cannot use instance member 'spotifyAccessToken' within property initializer; property initializers run before 'self' is available


 class DetailsViewController:UIViewController {

 var spotifyAccessToken: String?
 @IBAction func startPartyButton(_ sender: Any) {
     performSegue(withIdentifier: "startParty", sender: self)
 }
 @IBAction func joinPartyButton(_ sender: Any) {
     performSegue(withIdentifier: "joinPartySeg", sender: self)
 }

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if(segue.identifier == "startParty") {
     let GuestPartyVC = segue.destination as! GuestPartyViewController 
 // Here is where I get the error
     GuestPartyVC.spotifyAccessToken = spotifyAccessToken
 }
 }

Я думал об объявлении этого в делегате приложения, но я не уверен, как это сделать, поскольку он впервые объявлен в LoginViewController.

1 Ответ

0 голосов
/ 10 апреля 2020

После входа в систему в LoginViewController и получения токена передайте его следующему контроллеру представления, каким бы он ни был, и снова передайте его из этого контроллера представления в GuestPartyViewController, чтобы вы могли использовать его.

Чтобы передать токен, вы можете либо передать его, введя его через инициализатор следующего контроллера представления, либо переопределив метод prepare(for:sender:), например:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Do check for the next view controller and set the value of the token here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...