tl; dr:
私は@objc
としてdidSelectRowAtIndexPath
が定義されたクラス拡張をマークする必要がありました。
詳細:私が持っている
:ほとんどの場合、didSelectRowAtIndexPath
がUITableViewDelegate
プロトコルに準拠するために使用されるクラスの拡張で定義されているのに対し、私のセットアップがあるため、継承の差があったことを
注
ParentVC
および
ChildVC
である。
ParentVC
は、クラス拡張を介して
UITableViewDelegate
に準拠しています(このアプローチはAppleの「Swiftプログラミング言語(Swift 4)」の「拡張機能によるプロトコル適合性の追加」を参照)。
ParentVC
はいくつかの方法を実装していますが、
didSelectRowAtIndexPath
は実装していません。
ChildVC
は、実際にはdidSelectRowAtIndexPath
が実装されています。これはクラス拡張(ChildVC
)で行われますが、このクラス拡張に適合(: UITableViewDelegate
)が含まれていないことに注意してください(ParentVC
既にこれを行い、ChildVC
でこれを実行しようとすると "冗長適合"エラーが発生します)。
@objc
をChildVC
のクラス拡張に追加すると問題が解決しました。
Swift/Xcode/compiler/analyzerのバグ(少なくとも警告が出ているかもしれませんか?)、またはプロトコルの適合性+継承に使用しているアプローチに欠陥があるかどうかはわかりません他の人がこれを受け入れるのを聞いてください。