Как передать данные в ViewController в новой раскадровке - PullRequest
0 голосов
/ 11 июня 2018

Я использую этот код для перехода на новую раскадровку и передачи переменной X в viewController в новой раскадровке

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall")
homeViewController.myVar = "x"
self.present(homeViewController, animated: true, completion: nil)

Но я получаю эту ошибку:

Значение типаУ 'UIViewController' нет члена 'myVar'

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вы должны изменить только код второй строки.1. Перейдите к раскадровке Main и проверьте класс ViewController, для которого вы хотите передать переменную, и задайте идентификатор раскадровки так же, как и имя класса.2. Теперь, если ваше имя класса « ViewControllerCall », измените код строки следующим образом:

let homeViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall") as! ViewControllerCall
0 голосов
/ 11 июня 2018

В этой строке:

let homeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall")

Вы говорите: «Создайте контроллер представления из раскадровки и определите его тип как UIViewController».Тем не менее, вам нужно указать его как ViewControllerCall.

. Вы можете сделать это путем приведения типа - добавив as? ViewControllerCall.(Или as! ViewControllerCall, если вы не хотите использовать предложение if let).

Ваш код должен выглядеть следующим образом:

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
if let homeViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall") as? ViewControllerCall {
    homeViewController.myVar = "x"
    self.present(homeViewController, animated: true)
}

Или

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall") as! ViewControllerCall
homeViewController.myVar = "x"
self.present(homeViewController, animated: true)

Обратите внимание, что при использовании as! вторым способом, который я представил, ваше приложение будет зависать, если контроллер представления с идентификатором ViewControllerCall не имеет типа ViewControllerCall.

...