後ろに遷移元のviewControllerが隠れている遷移の方法の場合は遷移元のviewWiiAppear/viewDidApperが呼ばれませんが、UISwitchの状態は保持されていると思うので、
UISwithの状態が保持されていない遷移の場合は、遷移元のviewWillAppear/viewDidAppearの中で、UserDefaultから保存したUISwitchの状態を読み込んで、UISwitchに適用してあげる処理をしてみてください。
-- 追記 --
UISwitchの状態はBool型(true/false)で表現されるので基本的にはBool型の値を保存、読み込みしてください。数値で表現したい場合はどの数値のときにonでどの数値のときにoffといったように数値をBOOLに変換して処理してください
UserDefaults データ保存
それと遷移時にということなので遷移させているコード類(遷移元VC/遷移先VC)を載せてください。
-- 追記 --
モーダル遷移ならswitchの状態は初期化されませんので…
どのようなことをされているかわからないので、コードを乗せていだけないと回答がむずかしいです。
↓でも参考にして頑張ってみてください。
サンプル
swift
1import UIKit
2
3class ViewController: UIViewController {
4
5 @IBOutlet weak var tSwitch: UISwitch!
6
7 var switchStatus: Bool = true {
8 didSet {
9 if oldValue != switchStatus {
10 saveSwitchStatus()
11 }
12 }
13 }
14
15 override func viewDidLoad() {
16 super.viewDidLoad()
17 readSwitchStatus()
18 }
19
20 @IBAction func switchDidTap(_ sender: UISwitch) {
21 switchStatus = sender.isOn
22 }
23
24 @IBAction func transitionBtnDidTap(_ sender: Any) {
25 performSegue(withIdentifier: "Goto2ndVC", sender: nil)
26 }
27
28 @IBAction func backFromSecondVC(segue: UIStoryboardSegue){
29 print("backFrom2ndVC")
30 }
31
32 func saveSwitchStatus() {
33 let ud = UserDefaults.standard
34 ud.set(switchStatus, forKey: "switchStatus")
35 }
36
37 func readSwitchStatus() {
38 let ud = UserDefaults.standard
39 ud.register(defaults: ["switchStatus": true])
40 switchStatus = ud.bool(forKey: "switchStatus")
41 tSwitch.isOn = switchStatus
42 }
43
44}
45
46class SeondVC: UIViewController {
47
48 override func viewDidLoad() {
49 super.viewDidLoad()
50 }
51
52 @IBAction func pushReturnBtn(_ sender: Any) {
53 self.dismiss(animated: true, completion: nil)
54 }
55
56}
57