我正在尝试快速使用协议(protocol)/委托(delegate),虽然我没有收到任何错误,但似乎我的委托(delegate)没有被创建。它对我的返回为零,我不知道为什么。
这是我的代码
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()
}
}
符合协议(protocol)的Class 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")
}
}
最佳答案
问题可能出在您未在此处显示的代码中。在prepareForSegue中,您通常希望在目标 View Controller 上设置委托(delegate)。
本质上,您将其设置在您正在创建的类的实例上,但这并不是实际显示的实例。因此显示的实例没有委托(delegate)。
删除第二个 Controller 的本地变量, View 中委托(delegate)的设置确实加载,只需将其设置在目的地上,为segue做好准备,我打赌它会完美地工作。
关于xcode - 委托(delegate)协议(protocol)不起作用,返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29049889/