Как я могу использовать переменную вне функции, я ищу, чтобы получить переменную documentdata () в кнопки ответа - PullRequest
0 голосов
/ 02 апреля 2020

Поскольку я вызываю getdata () в функции viewDidLoad, я не могу получить переменную documentdata. Я пытаюсь использовать данные документа для кнопки. Я знаю, что для получения данных мне также нужен тип возврата, но я не могу этого получить. TLDR: я пытаюсь получить значение documentdata в другую совершенно другую функцию. Заранее благодарю всех, кто откликнулся.

    import UIKit
   import Firebase
  import FirebaseFirestore
 class QuizViewController: UIViewController {

@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var answerButtonTwo: UIButton!
@IBOutlet weak var answerButtonOne: UIButton!
@IBOutlet weak var answerButtonThree: UIButton!
@IBOutlet weak var answerButtonFour: UIButton!

@IBOutlet weak var displayAnswerChoice: UILabel!
var isrun = false
var documentdata:[String:Any] = ["":""]
override func viewDidLoad(){
    super.viewDidLoad()
    setupElements()
    getData()

   }


func setupElements(){
    answerButtonOne.setTitle("", for:.normal)
    answerButtonTwo.setTitle("", for:.normal)
    answerButtonThree.setTitle("", for:.normal)
    answerButtonFour.setTitle("", for:.normal)

    questionLabel.text = ""
    displayAnswerChoice.text = ""
}
func getData() {
    let db = Firestore.firestore()

    db.collection("quizs").document("basketballQuiz").getDocument { (document,error) in

               if error == nil{
                   print("cant get data")

               }
               if document != nil && document!.exists{
               let documentdata = document!.data()
               self.questionLabel.text = documentdata?["Question"] as? String
               self.answerButtonOne.setTitle(documentdata?["Answer1"] as? String, for:.normal)
               self.answerButtonTwo.setTitle(documentdata?["Answer2"] as? String, for:.normal)
               self.answerButtonThree.setTitle(documentdata?["Answer3"] as? String, for:.normal)
               self.answerButtonFour.setTitle(documentdata?["Answer4"] as? String, for:.normal)

               }

    }

   }



  @IBAction func AnswerOneTap(_ sender: Any) {
    let rightAnswer:Int = documentdata["correctAnswer"] as! Int
    if (rightAnswer == 1){
        displayAnswerChoice.text = "Correct"
        displayAnswerChoice.backgroundColor = UIColor(named: "Green")
    }

}
@IBAction func AnswerTwoTap(_ sender: Any) {
    let rightAnswer:Int = documentdata["correctAnswer"] as! Int
    if (rightAnswer == 2){
        displayAnswerChoice.text = "Correct"
        displayAnswerChoice.backgroundColor = UIColor(named: "Green")
    }

}
@IBAction func AnswerThreeTap(_ sender: Any) {
    let rightAnswer:Int = documentdata["correctAnswer"] as! Int
    if (rightAnswer == 3){
        displayAnswerChoice.text = "Correct"
        displayAnswerChoice.backgroundColor = UIColor(named: "Green")
    }
}
@IBAction func AnswerFourTap(_ sender: Any) {
    let rightAnswer:Int = documentdata["correctAnswer"] as! Int
    if (rightAnswer == 4){
        displayAnswerChoice.text = "Correct"
    }
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destination.
    // Pass the selected object to the new view controller.
}
*/

}

1 Ответ

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

Просто назначьте полученное documentdata свойству documentdata

if let documentdata = document?.data() {
    self.documentdata = documentdata
    self.questionLabel.text = documentdata["Question"] as? String
    self.answerButtonOne.setTitle(documentdata["Answer1"] as? String, for:.normal)
    self.answerButtonTwo.setTitle(documentdata["Answer2"] as? String, for:.normal)
    self.answerButtonThree.setTitle(documentdata["Answer3"] as? String, for:.normal)
    self.answerButtonFour.setTitle(documentdata["Answer4"] as? String, for:.normal)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...