2017-07-04 67 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