Я пытался передавать переменные между представлениями в Swift и сталкивался с довольно абстрактным понятием протоколов и делегатов.
Затем я попытался сохранить ссылку на первый вид во втором представлении и сразу вызвать функции. Кажется, что это работает:
ЭКРАН 1
class Screen1: UIViewController {
var myName = "Screen1"
override func viewDidLoad() {
super.viewDidLoad()
}
//
// checking if the segue to screen 2 is called and then passing a reference
//
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if segue.identifier == "screen2Segue"{
let vc = segue.destinationViewController as Screen2
vc.storedReference = self
}
}
func getName() -> String {
return myName
}
}
ЭКРАН 2
class Screen2: UIViewController {
var storedReference:Screen1!
override func viewDidLoad() {
super.viewDidLoad()
}
func testReference() {
// calling a function on the stored reference to screen 1
var str = storedReference.getName()
println("Leaving screen 2, going to " + str)
}
}
Мой вопрос: что случилось с этим кодом? Зачем использовать делегаты и протоколы, если вы можете просто передать ссылку напрямую?
Возможно, связано: когда представление не инициализируется и заменяется совершенно новым экземпляром представления? Я вызываю "getName()" на старый экземпляр?