Назначенная переменная на следующем VC равна нулю - PullRequest
0 голосов
/ 14 мая 2019

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 голосов
/ 14 мая 2019

Добавить пользовательский 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().

0 голосов
/ 14 мая 2019

попробуйте это (работает только в раскадровке): -

func onSelectOption(sender: UITapGestureRecognizer) {

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

    navigationController?.pushViewController(nextVC, animated: true)
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...