2017-07-04 68 views
-1
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 Test!协议init以及测试类Swift协议代表返回零

class calling:testDelegate{ 

override func viewDidLoad() { 
     //blah blah  
    } 

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

这是调用类。

我想在调用类中调用open func,但它根本不调用, 在测试类中甚至打印(“hello”)没有调用它,因此保持返回nil,因此也不会调用调用函数。

+0

您是否在呼叫控制器中设置了测试控制器的代表? –

+0

@NiravD我设置类调用:testDelegate像这样 – john

+0

这是用来实现协议我问的是你在哪里设置委托? –

回答

0

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

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

希望它可以帮助..编码愉快!

+0

testDelegate在测试类中为零... – john

+0

因为您没有分配任何类作为您的测试类的代表。 – luckyShubhra

+0

在从呼叫导航到测试之前,您可以将您的调用类设置为您的测试类的委托。 – luckyShubhra