6

Swift 2 でマップ上にポリラインを描画しようとしています。すべて正常に動作しますが、このコードに対してコンパイラの警告が表示されます。

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {

    if overlay is MKPolyline {

        let polylineRenderer = MKPolylineRenderer(overlay: overlay)

        polylineRenderer.strokeColor = UIColor.redColor()

        polylineRenderer.lineWidth = 5

        return polylineRenderer
    }

    return nil

}

これにより、「 mapView (rendererForOverlay) の結果とパラメーターには、プロトコル MKMapViewDelegate が期待するものとは異なるオプションがあります」という警告が表示されます。

これで問題なくコンパイルできますが、コンパイラの警告が表示されるのが気になります。

最初の行を次のように変更すると

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {

! を削除すると、警告は消えますが、戻り値を nil にすることはできず、コードはコンパイルされないというエラーが表示されます。

これは、同じ問題が述べられているが満足のいく答えが得られないこのスレッドのフォローアップでもあります: Swift 2 MKMapViewDelegate rendererForOverlay optionality

Swift 2 でこの関数を使用する正しい方法を誰かが明らかにすることはできますか?

ありがとう。

4

2 に答える 2

5

nil を返さないでください。これは、作成したオーバーレイに対してのみ呼び出されるため、オーバーレイが MKPolyline であるかどうかを確認する代わりに、どのオーバーレイであるかを確認してください。1 つしかない場合は、指定されたポリライン レンダラーがどれであるかを確認せずに返します。

于 2015-09-08T08:12:35.553 に答える