値を渡す時によく使用する代表的なパターンを以下に記載しました、参考にしてみてください。
※クラスAからクラスBに遷移した前提で書いています。
Delegateによる値渡しの例
swift
1
2 import UIKit
3
4 class ViewController : UIViewController , TableViewControllerDelegate {
5
6 @IBOutlet weak var mytext : UITextView !
7
8 override func viewDidLoad ( ) {
9 super . viewDidLoad ( )
10
11 }
12
13 @IBAction func pushNext ( sender : AnyObject ) {
14 // ボタン押下時にTableViewControllerに遷移
15 performSegueWithIdentifier ( "Next" , sender : nil )
16 }
17
18 // Delegateで呼ばれる
19 func setText ( text : String ) {
20 mytext . text = text
21 }
22
23 override func prepareForSegue ( segue : UIStoryboardSegue , sender : AnyObject ? ) {
24
25 if let next = segue . destinationViewController as ? TableViewController {
26 // Delegateをselfに設定
27 next . delegate = self
28 }
29 }
30 }
31
32 // ------------------------------------------------------------
33
34 import UIKit
35
36 protocol TableViewControllerDelegate : class {
37 func setText ( text : String )
38 }
39
40 class TableViewController : UITableViewController {
41
42 weak var delegate : TableViewControllerDelegate !
43
44 override func viewDidLoad ( ) {
45 super . viewDidLoad ( )
46
47 }
48
49 @IBAction func zenbun ( sender : AnyObject ) {
50 // ボタン押下時にDelegateメソッドで値を設定する
51 delegate ? . setText ( "テスト" )
52 }
53
54 override func numberOfSectionsInTableView ( tableView : UITableView ) - > Int {
55 return 0
56 }
57
58 override func tableView ( tableView : UITableView , numberOfRowsInSection section : Int ) - > Int {
59 return 0
60 }
61 }
62
クロージャーによる値渡しの例
swift
1 import UIKit
2
3 class ViewController : UIViewController {
4
5 @IBOutlet weak var mytext : UITextView !
6
7 override func viewDidLoad ( ) {
8 super . viewDidLoad ( )
9
10 }
11
12 @IBAction func pushNext ( sender : AnyObject ) {
13 // ボタン押下時にTableViewControllerに遷移
14 performSegueWithIdentifier ( "Next" , sender : nil )
15 }
16
17 override func prepareForSegue ( segue : UIStoryboardSegue , sender : AnyObject ? ) {
18
19 if let next = segue . destinationViewController as ? TableViewController {
20 // クロージャを設定する
21 next . closuer = { ( text ) in
22 self . mytext . text = text
23 }
24 }
25 }
26 }
27
28 // ------------------------------------------------------------
29
30 import UIKit
31
32 class TableViewController : UITableViewController {
33
34 var closuer : ( String - > ( ) ) !
35
36 override func viewDidLoad ( ) {
37 super . viewDidLoad ( )
38
39 }
40
41 @IBAction func zenbun ( sender : AnyObject ) {
42 closuer ( "テスト" )
43 }
44
45 override func numberOfSectionsInTableView ( tableView : UITableView ) - > Int {
46 return 0
47 }
48
49 override func tableView ( tableView : UITableView , numberOfRowsInSection section : Int ) - > Int {
50 return 0
51 }
52 }
Notificationによる値渡しの例
swift
1 import UIKit
2
3 class ViewController : UIViewController {
4
5 @IBOutlet weak var mytext : UITextView !
6
7 override func viewDidLoad ( ) {
8 super . viewDidLoad ( )
9
10 // 通知を登録
11 NSNotificationCenter . defaultCenter ( ) . addObserver ( self , selector : # selector ( ViewController . update ( _ : ) ) , name : "TextUpdateNotification" , object : nil )
12 }
13
14 deinit {
15 NSNotificationCenter . defaultCenter ( ) . removeObserver ( self )
16 }
17
18 func update ( notification : NSNotification ? ) {
19 mytext . text = notification ? . object as ! String
20 }
21
22 @IBAction func pushNext ( sender : AnyObject ) {
23 // ボタン押下時にTableViewControllerに遷移
24 performSegueWithIdentifier ( "Next" , sender : nil )
25 }
26 }
27
28 // ------------------------------------------------------------
29
30 import UIKit
31
32 class TableViewController : UITableViewController {
33
34 override func viewDidLoad ( ) {
35 super . viewDidLoad ( )
36
37 }
38
39 @IBAction func zenbun ( sender : AnyObject ) {
40 // 通知を送信
41 NSNotificationCenter . defaultCenter ( ) . postNotificationName ( "TextUpdateNotification" , object : "テスト" )
42 }
43
44 override func numberOfSectionsInTableView ( tableView : UITableView ) - > Int {
45 return 0
46 }
47
48 override func tableView ( tableView : UITableView , numberOfRowsInSection section : Int ) - > Int {
49 return 0
50 }
51 }