###Swift3 selectorの引数を参照渡ししたい
Timer.scheduledTimerで呼び出し元の値(別のクラスから呼び出しています)を変更したいと考えています。
また、呼び出し元の値を変更するコードも別のクラスに定義しています。
クラス | 内容 |
---|---|
ViewController | 変更したい値a,bを保持しています |
PosTimer | Calcにa,bを渡すコードを記述しています(ここで参照渡しをしたい) |
Calc | 実際に、a,bの値を変更するコードを記述しています |
###発生している問題
以下のようなコードを書いてみたのですが、呼び出し元のViewContorollerクラスでのa,bの値は変化していませんでした。
###該当のソースコード
lang
1 2import UIKit 3 4class ViewController: UIViewController { 5 6 let posTimer = PosTimer() 7 let calc = Calc() 8 9 // このa,bの値を変更したい 10 var a = 1 11 var b = 1 12 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 posTimer.StartTimer(a: &a, b: &b, calc: calc) 18 19 } 20 21 override func didReceiveMemoryWarning() { 22 super.didReceiveMemoryWarning() 23 24 25 } 26 27} 28 29
lang
1 2import UIKit 3 4 5class PosTimer: NSObject { 6 7 var posTimer: Timer? 8 9 func StartTimer(a: inout Int, b: inout Int, calc: Calc) { 10 11 let dic = ["a": a, "b": b, "calc": calc] as [String : Any] 12 13 // ここでUpdateにa,bを参照渡ししたい 14 posTimer = Timer.scheduledTimer( 15 timeInterval: 1, 16 target: self, 17 selector: #selector(UpDate), 18 userInfo: dic, 19 repeats: true 20 ) 21 22 23 } 24 25 func UpDate(timer: Timer) { 26 27 let userInfo = timer.userInfo as! [String: Any] 28 var a = userInfo["a"] as! Int 29 var b = userInfo["b"] as! Int 30 let calc = userInfo["calc"] as! Calc 31 32 // ここで参照渡しされたa,bをcalcに渡して値を変更したい 33 calc.IncNum(a: &a, b: &b) 34 35 } 36 37} 38
lang
1 2import UIKit 3 4class Calc: NSObject { 5 6 // 参照渡しされたa,bの値を変更する 7 func IncNum(a: inout Int, b: inout Int) { 8 9 a += 1 10 b += 1 11 12 } 13 14} 15 16 17
ご教授お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/09 07:26