Ошибка UIViewController не имеет члена

#ios #swift #uiviewcontroller #swift3

#iOS #swift #uiviewcontroller #swift3

Вопрос:

В настоящее время я работаю над своим приложением, чтобы изучить swift (я совершенно новый). И я наткнулся на ошибку, которую, похоже, я просто не могу разрешить. У меня есть два представления в моей раскадровке с двумя viewcontrollers, следовательно, ViewController amp; Settings.

В представлении «Настройки» у меня есть textfield , а в представлении «ViewController» у меня есть метка.

Я хочу передать текст из текстового поля в «настройках» на мою метку в «viewcontroller»

В настоящее время я получаю следующую ошибку:

значение типа ‘UIViewController’ не имеет члена ‘ViewController’

Мой код выглядит примерно так для поля ввода:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    var secondVC: ViewController = segue.destination.ViewController as ViewController

    secondVC.receivedString = textField.text!
}
  

для метки:

 class ViewController: UIViewController {

@IBOutlet var city: UILabel!
var receivedString: String = ""


override func viewDidLoad() {
    super.viewDidLoad()


    label.text = receivedString
}
  

«label.text» также дает мне неразрешенный идентификатор..

Ответ №1:

Чтобы получить назначение viewController в Swift 3, его просто segue.destination нет segue.destination.ViewController .

 var secondVC = segue.destination as! ViewController
  

Для второй ошибки у вас есть объявление UILabel с именем city не label так, как должно быть city.text = receivedString

Комментарии:

1. хм, это действительно устранило ошибку, если я решу сказать: переопределить функцию подготовки (для перехода: UIStoryboardSegue, отправитель: есть?) { пусть secondVC = segue . назначение как! ViewController secondVC.label = TextField.text!

2. Я думаю, это то, что я сделал? Разве это не лучшая практика для этого?

3. @JeppeC В вашем вопросе вы передаете строку с объектом receivedString и присваиваете текст метки города viewDidLoad , что является правильным способом передачи данных, потому что в prepare(for:sender:) UILabel объект еще не инициализирован.

4. Добро пожаловать, приятель 🙂

5. Да, и, кстати! Просто для логики этого, теперь, когда я сделал переход, смогу ли я тогда просто передать больше объектов, не записывая всю функцию снова? 🙂