我正在尝试在swift中使用协议/委托,虽然我没有收到任何错误,但似乎我的委托没有被创建。它对我不利,我不知道为什么。
这是我的代码
第1类
import UIKit
protocol GameViewSliding{
func slideGameView()
}
class GameDetailsViewController: UIViewController {
var delegate:GameViewSliding?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func showOptions(sender: AnyObject) {
println("button pressed")
println(delegate)
delegate?.slideGameView()
}
}
符合协议的第2类
import UIKit
var currentHoleNumber:Int = 0
var parThree = false;
var parFive = false;
class GameViewController: UIViewController, GameViewSliding{
var gameDetailsVC:GameDetailsViewController = GameDetailsViewController()
override func viewDidLoad() {
super.viewDidLoad()
println("inside the game class")
gameDetailsVC.delegate = self
}
func slideGameView(){
println("this is from the root controller")
}
}
答案 0 :(得分:1)
问题很可能出在这里没有显示的代码中。在prepareForSegue中,您通常希望在目标视图控制器上设置委托。
基本上,您是在要创建的类的实例上设置它,但这不是实际显示的实例。因此,显示的实例没有委托。
删除第二个控制器的本地var,并且视图中委托的设置确实已加载,只需将其设置在目的地上以准备segue,我敢打赌它将完美运行。