2017-10-25 12 views
0

私はこれを100回調査しましたが、私の問題に対する答えはまだ見つかりません。私は非常に単純なプロトコルを持っていますが、それは常にnilです。私はperiodDelegate = selfを追加しようとしましたが、エラーが発生しますCannot assign value of type 'ScoreClockPopoverViewController' to type 'PeriodDelegate!'私は同じセットアップを使用して、うまく動作する他のプロトコルを持っています。スウィフトデリゲートプロトコルはゼロです

私には何が欠けていますか?

ありがとうございます!私が呼び出す必要が

import UIKit 

protocol PeriodDelegate { 

    func changePeriodButtonImage(selectedPeriod: Period) 

} 

class ScoreClockPopoverViewController: UIViewController { 

    //delegate 
    var periodDelegate: PeriodDelegate! 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     print("viewDidLoad/periodDelegate \(String(describing: periodDelegate!))") 

    } 

} 

機能は、すべてのUICollectionViewCell`

class HeaderCollectionViewCell: UICollectionViewCell { 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     ... 

    } 


extension HeaderCollectionViewCell: PeriodDelegate { 

    func changePeriodButtonImage(selectedPeriod: Period) { 

     print("blah") 

     switch selectedPeriod { 
     case .first: 
      print("first") 
     case .second: 
      print("second") 
     case .third: 
      print("third") 
     case .overtime: 
      print("overtime") 
     case .shootout: 
      print("shootout") 

     } 
    } 
} 
+0

デリゲートをViewController用ではないセルに一致させようとします。 –

+1

デリゲートをクラスに限定して弱くします。 – the4kman

+0

あなたのUICollectionViewのコントローラはありますか? – Michel

答えて

0

まずであり、ビューコントローラのデリゲートとしてのセルを持っていることは非常にまれです。普段、それは別の方法です。しかし、とにかく、あなたの場合はperiodDelegateをこのセルに設定しなければなりません。あなたのセルは、VCではなくデリゲートプロトコルを実装しています。しかし、悪いデザインのようなにおいがするので、何をしたいのかをよく考え直してください。

0

「私は非常に単純なプロトコルを持っていますが、それは常にゼロです」意味を成さない。

プロトコルは特殊な言語です。それはゼロでも非ゼロでもありません。

ScoreClockPopoverViewControllerには、PeriodDelegateプロトコルに準拠するデリゲートプロパティperiodDelegateがあり、そのデリゲートプロパティはnilです。

代理人は他のどのようなプロパティでもあります。あなたがそれに値を割り当てない限り、それはゼロになります。あなたがScoreClockPopoverViewControllerの代理人としてオブジェクトを割り当てたことがないので、これはゼロです。

ScoreClockPopoverViewControllerのインスタンスを作成するのは誰ですか、ScoreClockPopoverViewControllerの代理人はどのオブジェクトですか?

ScoreClockPopoverViewControllerというコードを投稿してください。これは、代理人を割り当てる必要がある場所です。 (このコードは、ガイドとしてのものであり、あなたはそれがあなたのアプリケーションで動作させるために、それを修正する必要がありますあなたアプリに貼り付けることができなくなります

let myScoreClockPopoverViewController = storyboard.instantiateViewControllerWithIdentifier("ScoreClockPopoverViewController") 
myScoreClockPopoverViewController.periodDelegate = self 
present(myScoreClockPopoverViewController, 
    animated: true, 
    completion: nil) 

:このコードは次のようになります。

名前が示すように、myScoreClockPopoverViewControllerをポップオーバーとして表示する場合は、上記のコードを調整する必要があります。

関連する問題