0

問題は解決しましたが、それを行うためのより良い方法があるかどうかはわかりません。ワークアウト ログを作成しています。VC1 から日付を選択し、VC 2 を押してエクササイズを選択し、そのエクササイズを VC1 に戻したいです。そのような委任を使用して返されたデータを取得しています。

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.


    }

問題があります。委任方法では var date を使用できませんが、使用する必要があります。

私の回避策は、完了ブロックをプライベート変数として使用することです。

    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()     
        }

    }

これを行う他の定義済みの方法はありますか?私はそこにそのcompletionBlock変数を持っているのが好きではありません。

4

1 に答える 1

0

共有設定を使用するか、次のようなシングルトンを使用します。

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

let sharedDateAccess = ConstantData()

したがって、変数の値を変更して、どこからでもアクセスできます。

func addButtonInSectionDidClick(date:NSDate) {

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

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

   sharedDataAccess.myDate = date   

 }
于 2015-08-01T12:09:22.400 に答える