У меня возникли проблемы с обволакиванием вокруг делегации в Свифте. После прочтения некоторых руководств, я смог настроить его между двумя ViewControllers, но я не понимаю, как это работает. В моем первом контроллере представления у меня есть метка, которая отображает то, что было введено во втором контроллере представления, который содержит текстовое поле и кнопку (которая возвращается к первому контроллеру представления). Вот код для первого контроллера представления:Быстрое делегирование
@IBOutlet weak var labelText: UILabel!
func userDidEnterInformation(info: String) {
labelText.text = info;
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "transition"){
let secondVC: SecondViewController = segue.destinationViewController as! SecondViewController;
secondVC.delegate = self;
}
}
Вот код для второго контроллера представления:
protocol DataEnteredDelegate{
func userDidEnterInformation(info: String);
}
@IBOutlet weak var userText: UITextField!
var delegate: DataEnteredDelegate? = nil;
@IBAction func buttonPressed(sender: AnyObject) {
let information = userText.text!;
delegate!.userDidEnterInformation(information);
self.navigationController?.popToRootViewControllerAnimated(true);
}
Я понимаю, что в тексте внутри текстового поля сохраняется в информации постоянной , то вызывается метод userDidEnterInformation из протокола, причем метод определяется внутри первого контроллера представления. Затем этот метод изменяет метку внутри первого контроллера представления. Дело в том, что я не уверен, что происходит в функции prepareForSegue. В частности, я не уверен, в чем цель secondVC.delegate = self.
Я буду признателен за любую четкость в деле делегирования.
BTW, в Swift вы можете опустить точки с запятой в конце каждой строки. Таким образом, ваш код будет выглядеть менее загроможденным. :-) – bio