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 - 在展开可选值时意外发现 nil - 从委托调用变量
而委托为 nil 或未实现外围设备:didDiscoverCharacteristicsForService:error: (Corebluetooth, Swift)