【问题标题】:Swift Protocol Delegate return nilSwift 协议委托返回 nil
【发布时间】:2017-07-04 00:39:37
【问题描述】:
protocol testDelegate: class {
    func open(channel: String, vc: UIViewController)
}

class test: UIViewController{

    weak var delegate: testDelegate?
}
override func viewDidLoad() {
        super.viewDidLoad()
        if self.delegate != nil {
        print("hello")
        self.delegate?.openGroupChannel(channel: channel!, vc: self)

}   

那是类测试!测试类中的协议初始化也是如此

class calling:testDelegate{

override func viewDidLoad() {
        //blah blah       
    }   

func func open(channel: String, vc: UIViewController){
    print("calling")
}

这是调用类。

我想在调用类中调用 open func 但它根本不调用, 甚至测试类中的 print("hello") 都没有调用它,它保持 return nil 因此也不会调用调用函数。

【问题讨论】:

  • 调用控制器时是否设置了测试控制器的委托?
  • @NiravD 我设置了像这样的类调用:testDelegate
  • 那是用来实现协议的,我要问的是你在哪里设置委托?
  • @NiravD 我没有设置也许这就是为什么?但即使是测试类委托也是 nil,所以我不知道调用方法是否正在工作
  • 好伤心...甚至测试班的代表是零!!!不知道为什么 bb @NiravD

标签: ios iphone swift3


【解决方案1】:

您需要将您的calling 设置为test ViewController 的委托。 在您的calling 类中,在导航之前创建test 类的对象,并将calling 类设置为test 类的代表

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let testVc = segue.destinationViewController as? test {
    testVc .delegate = self
    }
}

希望对您有所帮助.. 编码愉快!!

【讨论】:

  • 因为你没有指定任何类作为你的测试类的委托。
  • 在从调用导航到测试之前,您可以将调用类设置为测试类的委托。
猜你喜欢
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多