web-dev-qa-db-ja.com

Swift 3UITableViewデータソースメソッドviewForHeaderInSectionは警告を出します

Swift 3に移行した後、次の方法があります。

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {}

そしてそれは私に警告を与えます

インスタンスメソッド 'tableView(tableView:viewForHeaderInSection :)'は、プロトコル 'UITableViewDataSource'のオプション要件 'tableView(_:titleForHeaderInSection :)'にほぼ一致します。

修正-メソッドをプライベートにするか、@ "nonobjc"アノテーションを追加することを提案します。警告を解決する方法は?

19
Nik Yekimov

アプリ全体で同様の警告が表示されました。実際には2つの問題がありました。メソッドシグネチャにアンダースコアを追加するか、メソッドの元のプロトコルを実装する適切な拡張子にメソッドを移動することで、すべての警告を修正しました。

あなたの問題は両方の組み合わせかもしれないと思います。

詳細:

1)「tableView:...」の前に「アンダースコア」文字を追加するのを忘れる可能性があります。これにより、Swift 3では別のメソッドになります(Swift2.3では追加されません。問題)。したがって、これを変更する必要があります。

_func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
_

これに:

_func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
_

2)メソッドtableView(_:viewForHeaderInSection:)UITableViewDelegateプロトコルからのものですが、コンパイラはこのメソッドを認識していないようです。UITableViewDataSourceからのメソッドのみを認識して試行します。それらの1つをアドバイスします(tableView(_:titleForHeaderInSection:))。つまり、UITableViewDelegateをまったく実装しないか、実装するかのどちらかですが、別の拡張機能では多分?

27
Pavel Smejkal