2017-09-20 16 views
0

私はXcodeの9に、スウィフト4にスウィフト3からプロジェクトを更新していますdidSelectRowAtIndexPath(Xode 9、スウィフト4)

、それは選んだように私に頼みます」 Swift 4 @objc推論 "、私は"推論を最小にする(推奨) "を選択する。

次に、「Swift 4 @objc推論への移行」、「Swift 4最小推論移行の完了」という節のXcodeヘルプページからすべての手順を実行します。

最後の2つのステップ(プロジェクトのビルド設定を開きます; Swift 3 @objcの推論をデフォルトに設定します)を完了した後、突然didSelectRowAtIndexPathが呼び出されません。エラーや警告はなく、単に呼び出されません。

答えて

2

tl; dr:
私は@objcとしてdidSelectRowAtIndexPathが定義されたクラス拡張をマークする必要がありました。


詳細:私が持っている

:ほとんどの場合、didSelectRowAtIndexPathUITableViewDelegateプロトコルに準拠するために使用されるクラスの拡張で定義されているのに対し、私のセットアップがあるため、継承の差があったことを

ParentVCおよび ChildVCである。 ParentVCは、クラス拡張を介して UITableViewDelegateに準拠しています(このアプローチはAppleの「Swiftプログラミング言語(Swift 4)」の「拡張機能によるプロトコル適合性の追加」を参照)。 ParentVCはいくつかの方法を実装していますが、 didSelectRowAtIndexPathは実装していません。

ChildVCは、実際にはdidSelectRowAtIndexPathが実装されています。これはクラス拡張(ChildVC)で行われますが、このクラス拡張に適合(: UITableViewDelegate)が含まれていないことに注意してください(ParentVC既にこれを行い、ChildVCでこれを実行しようとすると "冗長適合"エラーが発生します)。

@objcChildVCのクラス拡張に追加すると問題が解決しました。

Swift/Xcode/compiler/analyzerのバグ(少なくとも警告が出ているかもしれませんか?)、またはプロトコルの適合性+継承に使用しているアプローチに欠陥があるかどうかはわかりません他の人がこれを受け入れるのを聞いてください。

関連する問題