私は次のように条件付きの拡張子を使用してMKMapViewDelegateのデフォルトの実装を作成しようとしています:非 - 「@にObjC」メソッドは、条件付きの拡張子を持つ「@objc」プロトコルのオプションの要件を満たしていない
extension MKMapViewDelegate where Self: NSObject {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
...
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
...
}
}
しかし、私は私が手コード警告
のオプションの要件を満たしていません非コンパイルするとき - '@にObjC' メソッド 'のMapView(_:viewForは:)' '@objc' プロトコル 'MKMapViewDelegate'
「Self」のNSObjectへの適合が、警告が発生しないことを意味することを期待しました。警告の上に、デリゲートインスタンスがUIViewControllerであり、したがってNSObjectに準拠していても、デリゲートメソッドは呼び出されません。
エクステンションで「どこ」がどのように機能するのか誤解していますか?
可能重複[非 - '@にObjC' メソッドは、 '@objc' プロトコルの任意の要件を満たさない(http://stackoverflow.com/questions/39487168/non -objc-method-does-not-satisfied-optional-of-objc-protocol) –