Swift 协议委托返回 nil

Posted

技术标签:

【中文标题】Swift 协议委托返回 nil【英文标题】:Swift Protocol Delegate return 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 【参考方案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
    

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

【讨论】:

因为你没有指定任何类作为你的测试类的委托。 在从调用导航到测试之前,您可以将调用类设置为测试类的委托。

以上是关于Swift 协议委托返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 委托协议结构

Swift - 在展开可选值时意外发现 nil - 从委托调用变量

而委托为 nil 或未实现外围设备:didDiscoverCharacteristicsForService:error: (Corebluetooth, Swift)

UITableView 的委托是 Nil

Swift使用委托实现多个协议

Swift 中不调用协议委托方法