UITabBarControllerを使っていると思いますが、
UITabBarControllerのデリゲートメソッドで切り替え先が特定のViewControllerだった場合
値を渡してしまうのはどうでしょうか。
例としてAViewControllerとBViewControllerをUITabBarControllerで管理しているとして、
AViewControllerからBViewControllerへTabを切り替えた時に
AViewControllerの持つ値をBViewControllerへ渡すのは以下のようになります。
AViewController
Swift
1class AViewController: UIViewController {
2
3 var aValue: String = ""
4
5 override func viewDidLoad() {
6 super.viewDidLoad()
7 }
8
9 override func viewWillAppear(_ animated: Bool) {
10 super.viewWillAppear(animated)
11
12 // 現在の時間を文字列として代入
13 aValue = "(Date())"
14 }
15}
BViewController
Swift
1class BViewController: UIViewController {
2
3 var bValue: String = "" {
4 didSet {
5 // 値が更新されたタイミングで print
6 print(bValue)
7 }
8 }
9
10
11 override func viewDidLoad() {
12 super.viewDidLoad()
13 }
14}
TabBarController
Swift
1class TabBarController: UITabBarController {
2
3 override func viewDidLoad() {
4 super.viewDidLoad()
5
6 // TabBarController の delegate を設定
7 self.delegate = self
8
9 // ViewController を生成
10 let aVC = UIStoryboard(name: "AViewController", bundle: nil).instantiateViewController(withIdentifier: "AViewController")
11 aVC.tabBarItem = UITabBarItem(title: "A", image: nil, tag: 0)
12
13 let bVC = UIStoryboard(name: "BViewController", bundle: nil).instantiateViewController(withIdentifier: "BViewController")
14 bVC.tabBarItem = UITabBarItem(title: "B", image: nil, tag: 1)
15
16 // TabBar にセット
17 self.viewControllers = [
18 aVC,
19 bVC
20 ]
21 }
22}
23
24extension TabBarController: UITabBarControllerDelegate {
25
26 func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
27 // 遷移先が BViewController の時
28 switch viewController {
29 case is BViewController:
30 // AViewController を取り出し
31 // tabBarCotroller.viewControllers にはセットした ViewController 全てが入っている
32 guard let aVC = tabBarController.viewControllers?.first as? AViewController else {
33 break
34 }
35
36 guard let bVC = viewController as? BViewController else {
37 break
38 }
39
40 // AViewController の値を BViewController に代入
41 bVC.bValue = aVC.aValue
42 default:
43 // それ以外は何もしない
44 break
45 }
46 }
47}