2015-08-01 3 views
0

J'ai résolu mon problème, mais je ne sais pas s'il existe une meilleure façon de le faire. Je fais un journal d'entraînement. Depuis VC1, je veux sélectionner une date et appuyer sur VC 2 pour sélectionner un exercice, puis retourner à VC1. Je reçois les données renvoyées en utilisant une délégation comme ça.Bonne façon de retourner les données de VC sans perdre la portée

VC1

//Here the date of the new Workout. I have to get the exercise first. 
func addButtonInSectionDidClick(date:NSDate) { 

    //Delegate will call exerciseSelectionDismissedWithExerciseName   
    exerciseSelectionWireframe!.dismissDelegate = self 

    //Push the VC 2 for exercise selection 
    exerciseSelectionWireframe!.presentExerciseSelection()     

} 

func exerciseSelectionDismissedWithExerciseName(name:String) { 

     //Returned but I can't use the var date anymore. 


    } 

Il y a le problème. Je ne peux pas utiliser la date var, dans la méthode de délégation, mais j'en ai besoin.

Ma solution de contournement utilise un bloc d'achèvement en tant que var privé.

private var completionBlock: (() -> Void)? 

    //Here the date of the new Workout. I have to get the exercise first. 
    func addButtonInSectionDidClick(date:NSDate) { 

     //Delegate will call exerciseSelectionDismissedWithExerciseName   
     exerciseSelectionWireframe!.dismissDelegate = self 

     //Push the VC 2 for exercise selection 
     exerciseSelectionWireframe!.presentExerciseSelection() 

     completionBlock = {   
      var myDate = date 
     }    

} 

    func exerciseSelectionDismissedWithExerciseName(name:String) { 

     if let completionBlock = completionBlock { 
        completionBlock()  
     } 

    } 

Existe-t-il une autre façon prédéfinie de le faire? Je n'aime pas avoir cette completionBlock var là.

Répondre

0

Utilisez une préférence d'actions ou utiliser un singleton, quelque chose comme:

import Foundation 
class ConstantData { 
var myDate:NSDate = NSDate() 
} 

let sharedDateAccess = ConstantData() 

Vous pouvez modifier la valeur de la variable et vous pouvez y accéder depuis n'importe où:

func addButtonInSectionDidClick (date: NSDate) {

//Delegate will call exerciseSelectionDismissedWithExerciseName   
    exerciseSelectionWireframe!.dismissDelegate = self 

    //Push the VC 2 for exercise selection 
    exerciseSelectionWireframe!.presentExerciseSelection() 

    sharedDataAccess.myDate = date 

}