我试图在Swift的视图之间传递变量,遇到了比较抽象的协议和代理概念。
然后我尝试在第二个视图中存储对第一个视图的引用并直接调用该视图上的函数。看起来这样做是可行的:
SCREEN 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()”?