2017-07-04 19 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 calling:testDelegate{ 

override func viewDidLoad() { 
     //blah blah  
    } 

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

これはコールクラスです。

呼び出すクラスでopen funcを呼び出すが、呼び出すことは全くありません。 テストクラスのprint( "hello")も呼び出していないので、return nilを保持しているため、関数も同様に呼び出されません。

+0

呼び出しコントローラにテストコントローラのデリゲートを設定しましたか? –

+0

@NiravD私はクラス呼び出しのように設定しました:このようなtestDelegate – john

+0

これは、私が求めているプロトコルを実装するために使用されました。 –

答えて

0

callingtest ViewControllerの代理人に設定する必要があります。あなたのcallingクラスで は、ナビゲーションの前testクラスのオブジェクトを作成し、

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

としてあなたtestクラスの委譲としてcallingクラスを設定するコーディングハッピー...それがお役に立てば幸いです!

+0

testDelegateがテストクラスでnilであるのか分かりません... – john

+0

テストクラスのデルゲートとしてクラスを割り当てていないためです。 – luckyShubhra

+0

呼び出しからテストにナビゲートする前に、呼び出しクラスをテストクラスの代理人として設定できます。 – luckyShubhra