2016-12-17 12 views
-2

私はbackBtnPressed()の機能の中でstartTimer()の機能から変数myTimerにアクセスしたいと思います。基本的に私はこのコードをmyTimer.invalidate()私のbackBtnPressed()の機能の中に追加したいと思います。どうすればそれを達成できますか?別の関数から変数にアクセスする方法は?

func startTimer() { 
      var myTimer = Timer.scheduledTimer(timeInterval: 3.0, 
            target: self, 
            selector: #selector(scrollToNextCell), 
            userInfo: nil, 
            repeats: true) 
    } 

@IBAction func backBtnPressed(_ sender: UIButton) { 
     audioPlayer.stop() 
    } 
+1

クラスのメンバ変数としてmyTimerを追加します。 – Arjuna

+0

私はそれを試しました。 'var myTimer:Timer?'私は関数の外でこれを追加しました。しかし、 'backBtnPressed()'関数内で呼び出すと、 'nil'として返されます。 – Volkan

+0

クラスコード全体を投稿できますか? – Arjuna

答えて

0

シンプルは、あなたのタイマープロパティます

class MyClass { 
    var timer: Timer? 
    func startTimer() { 
     timer = Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(scrollToNextCell), userInfo: nil, repeats: true) 
    } 

    @IBAction func backBtnPressed(_ sender: UIButton) { 
      audioPlayer.stop() 
      timer.//do something with timer 
    } 
} 
+0

ありがとう!私は関数内でmyTimerの前にvarを愚かに追加していました – Volkan

1

それが今立っているとして、それが範囲外であるので、あなたは、startTimer()myTimer変数にアクセスすることはできません。そのためには、myTimerをクラス変数として宣言する必要があります。それらを初期化する必要があります。クラス内で必要なものをアクセスできます。また、startTimerを呼び出すことを忘れないでください。そうしないと、nilが返されます。

これは、多かれ少なかれ、このようになります。

class YourViewController: ViewController { 

    var myTimer: Timer? 
    //some of your functions here 
    //... 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     //... 
     startTimer() 
    } 

    func startTimer() { 
      myTimer = Timer.scheduledTimer(timeInterval: 3.0, 
             target: self, 
             selector: #selector(yourFunction), 
             userInfo: nil, 
             repeats: true) 
    } 

    @IBAction func backBtnPressed(_ sender: UIButton) { 
     //do whatever you want 
     myTimer.invalidate() 
    } 

} 
関連する問題