下一个VC的分配变量为nil

时间:2019-05-14 10:34:17

标签: swift

VC 1:

func onSelectOption(sender: UITapGestureRecognizer) {
    let vc2 = VC2()
    vc2.selectedValue = "1"

    navigationController?.pushViewController(vc2, animated: true)
}

VC 2:

var selectedValue: String?

override func viewDidLoad() {
    super.viewDidLoad()
    print(selectedValue) //prints nil
}

任何人都可以解释为什么selectedValue在VC2上为零吗?

2 个答案:

答案 0 :(得分:0)

尝试一下(仅在情节提要中起作用):-

func onSelectOption(sender: UITapGestureRecognizer) {

    let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "yourIdentifyerName") as! VC2
    vc2.selectedValue = "1"

    navigationController?.pushViewController(nextVC, animated: true)
 }

答案 1 :(得分:0)

initialiser接受VC2的自定义selectedValue

class VC1: UIViewController {
    @objc func onSelectOption(sender: UITapGestureRecognizer) {
        let vc2 = VC2(selectedValue: "1")
        navigationController?.pushViewController(vc2, animated: true)
    }
}

class VC2: UIViewController {
    var selectedValue: String?

    init(selectedValue: String?) {
        super.init(nibName: nil, bundle: nil)
        self.selectedValue = selectedValue
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print(selectedValue) //prints Optional("1")
    }
}

由于创建的VC2中没有storyboard,因此只有在调用selectedValue之后才能设置viewDidLoad()