Escribí dos Swift funciones (sólo una prueba de elección múltiple app)

func createQuestions() //this goes to Parse, and fetches the questions data that are going to question the users and store them into local arrays

func newQuestion() // this also fetches some other data (for example, some incorrect choices) from Parse and read local variables and finally set the labels to correctly display to the users

Quiero en ViewDidLoad, ejecutar primero createQuestion(), después de que se haya completado, a continuación, ejecute newQuestion(). De lo contrario, la newQuestion() tiene algunos problemas cuando la lectura de las variables locales que se suponía que iban a ser recuperado. ¿Cómo voy a manejar eso?

EDIT: he aprendido a utilizar cierre! Uno de los más pregunta de seguimiento. Estoy usando un bucle for para crear preguntas. Sin embargo, el problema es que el bucle no se ejecuta de forma ordenada. Entonces mi cheque para repetir la función (vocabTestedIndices) se produce un error y que traería dos idénticas preguntas. Quiero que el bucle for para ejecutar uno por uno, así que la pregunta creado no se superponen.
código de la imagen

  • Usted necesita para ejecutar newQuestion en el bloque de finalización de su primer Analizar consulta
InformationsquelleAutor DDR | 2016-01-25

4 Comentarios

  1. 8

    intentar

    override func viewDidLoad() {
        super.viewDidLoad()
        self.createQuestions { () -> () in
            self.newQuestion()
        }
    }
    
    
    func createQuestions(handleComplete:(()->())){
        //do something
        handleComplete() //call it when finished s.t what you want 
    }
    func newQuestion(){
        //do s.t
    }
  2. 4

    Lo que acerca de swift defer de este post?

    func deferExample() {
        defer {
            print("Leaving scope, time to cleanup!")
        }
        print("Performing some operation...")
    }
    
    //Prints:
    //Performing some operation...
    // Leaving scope, time to cleanup!
  3. 0

    Ya que son nuevos. No sé si sabes que los cierres o no, así que he colocado simple solución para usted. (la solución es similar a la de @Paulw11 comentó en su pregunta)
    simplemente llame en viewDidLoad:

    self.createQuestions()

    La tarea que desea realizar depende en el análisis de respuesta:

    sólo después de la respuesta llega desea llamar newQuestion función.

    Aquí es el análisis de la Documentación para swift: https://www.parse.com/docs/ios/guide#objects-retrieving-objects

    func createQuestions() {
        var query = PFQuery(className:"GameScore")
        query.whereKey("playerName", equalTo:"Sean Plott")
        query.findObjectsInBackgroundWithBlock {
          (objects: [PFObject]?, error: NSError?) -> Void in
    
          if error == nil {
            //The find succeeded.
    
            self.newQuestion()        
          } else {
            //Log details of the failure
            print("Error: \(error!) \(error!.userInfo)")
          }
        }
    }
    
    func newQuestion() {
     //here is your code for new question function
    }
  4. 0

    Cierre ayudará a lograr esta funcionalidad.

    Crea tu createQuestions función de la siguiente.

    func createQuestions(completion:((Array<String>) -> ())){
    
        //Create your local array for storing questions
        var arrayOfQuestions:Array<String> = []
    
        //Fetch questions from parse and allocate your local array.
        arrayOfQuestions.append("Question1")
    
        //Send back your questions array to completion of this closure method with the result of question array.
        //You will get this questions array in your viewDidLoad method, from where you called this createQuestions closure method.
        completion(arrayOfQuestions)
    }  

    viewDidLoad

    override func viewDidLoad() {
            super.viewDidLoad()
    
            //Do any additional setup after loading the view.
    
            //Calling createQuestions closure method.
            self.createQuestions { (arrayOfQuestions) -> () in
    
                //Pass your local questions array you received from createQuestions to newQuestion method.
                self.newQuestion(arrayOfQuestions)
            }
        }  

    Nueva Pregunta Método

    func newQuestion(arrayOfQuestions:Array<String>){
    
            //You can check your questions array here and process on it according to your requirement.
            print(arrayOfQuestions)
        }

Dejar respuesta

Please enter your comment!
Please enter your name here