2015-10-13 22 views
6

Tôi nhận được lỗi nàyNil không tương thích với kiểu trả về 'MKOverlayRenderer'

"Nil không tương thích với kiểu trả về 'MKOverlayRenderer".

Đây là mã của tôi:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer { 
    if overlay is MKCircle { 
     let circleRenderer = MKCircleRenderer(overlay: overlay) 
     circleRenderer.lineWidth = 1.0 
     circleRenderer.strokeColor = UIColor.purpleColor() 
     circleRenderer.fillColor = UIColor.purpleColor().colorWithAlphaComponent(0.4) 
     return circleRenderer 
    } 
     return nil 
    } 

tại sao nó xảy ra?

Trả lời

1

Vì nil không phải là MKOverlayRenderer. Nếu bạn mong đợi rằng một hàm có thể trả về nil, thì kiểu trả về phải là một tùy chọn. Như đã định nghĩa, hàm chỉ có thể trả về MKOverlayRenderer thực tế.

+0

tôi nên sử dụng gì thay vì nil? –

+0

Không có gì bạn nên hoặc là làm cho trở lại của bạn tuyên bố tùy chọn và trở lại nil hoặc làm cho lớp phủ của bạn loại MKCircle – milo526

+0

@ milo526 tùy chọn có nghĩa là? bạn có thể giải thích ngắn gọn không? –

3

Điều này dường như được giải đáp ở đây:

Swift 2 MKMapViewDelegate rendererForOverlay optionality

Bạn chỉ không được phép trở về con số không. Lớp phủ của bạn phải có trình kết xuất đồ họa. Thay thế "return nil" bằng một xác nhận.

+0

để bạn đang nói rằng đây là một lỗi? đúng? –

12

trả về MKPolylineRenderer() thay vì trả về 0.

2

Bạn không được giả sử trả lại nil cho chức năng ủy nhiệm này. Chế độ xem bản đồ đang chờ hiển thị cho mỗi lớp phủ. Trong trường hợp của bạn, bạn nên làm điều này:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer 
{ 
    assert(overlay is MKCircle, "overlay must be circle") 

    let circleRenderer = MKCircleRenderer(overlay: overlay) 
    circleRenderer.lineWidth = 1.0 
    circleRenderer.strokeColor = UIColor.purpleColor() 
    circleRenderer.fillColor = UIColor.purpleColor().colorWithAlphaComponent(0.4) 
    return circleRenderer 
} 

Tôi không nghĩ bạn nên trả lại MKPolylineRenderer() vì nó có thể ẩn lỗi của bạn.

Các vấn đề liên quan