私のアプリケーションで単純なコレクションビューがあり、セルがタップされたときにデリゲートを使用して通知を受け取るので、didSelectItemAtIndexPath:メソッドを実装します。この署名は、これに変更Swift 3の移行後にCollectionViewDelegateメソッドが呼び出されない
@objc func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
移行プロセスを通して実行後:スウィフト2では、このメソッドのシグネチャは、このように見えた
@objc func collectionView(collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
コンパイラは幸せだったと私は上の移動が、今このメソッドは」doesnの任意のセルをタップするとトリガーされます。私はそれを修正する方法を発見:
@objc(collectionView:didSelectItemAtIndexPath:) func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
明らかに、問題は、最初のパラメータ名にあったが、それが明示的にOBJ-Cセレクタを指定せずに動作しない理由を私はまだ理解していません。
私の実装も拡張されましたが、プロトコルの準拠はビューコントローラの宣言にありました。 "Objective-Cメソッド 'collectionView:didSelectItemAt:'メソッドによって提供された 'collectionView(_:didSelectItemAt :)'は要件のセレクタ( 'collectionView:didSelectItemAtIndexPath:')と一致しません。プロトコル準拠を拡張に移したとき、すべてが魅力的に機能しました。 Stilはここで何が間違っていたのか分かりません。私はswiftとobj-cの相互運用性についてもっと読む必要があると思います。 – wirrwarr