2015-09-08 19 views
6

Tôi cố gắng để vẽ một polyline trên bản đồ trong Swift 2. Tất cả đều hoạt động tốt, nhưng tôi nhận được một cảnh báo cho trình biên dịch mã này:Swift 2 MKMapViewDelegate rendererForOverlay biên dịch cảnh báo

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 

} 

này sẽ cung cấp cho tôi một cảnh báo nói rằng 'Kết quả và thông số trong mapView (rendererForOverlay) có tùy chọn khác với dự kiến ​​theo giao thức MKMapViewDelegate'

Bây giờ, điều này sẽ tốt, nhưng nó làm tôi thấy cảnh báo trình biên dịch hiển thị.

Nếu tôi thay đổi dòng đầu tiên để

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

bằng cách loại bỏ!, Cảnh báo sẽ biến mất nhưng tôi nhận được một lỗi rằng sự trở lại không thể bằng không và mã sẽ không biên dịch nữa.

Đây cũng là một theo dõi chủ đề này nơi cùng một vấn đề đã được nêu nhưng không có câu trả lời thỏa mãn có sẵn: Swift 2 MKMapViewDelegate rendererForOverlay optionality

bất cứ ai có thể rụng bất kỳ ánh sáng trên con đường đúng để sử dụng chức năng này ngay bây giờ ở Swift 2?

Cảm ơn.

Trả lời

17

Đi bằng gì autocomplete cho thấy nguyên mẫu trông như thế này:

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

Và rõ ràng không có gì bạn có thể làm gì về nó, ngoại trừ trở return MKPolylineRenderer() nơi thường bạn sẽ trở về con số không là.

Đối với tôi nó trông giống như một lỗi thực hiện, bởi vì đây là những gì các tài liệu nói về các đối tượng trả về:

Các renderer để sử dụng khi trình bày các lớp phủ quy định trên bản đồ. Nếu bạn quay trở lại số, không có nội dung nào được vẽ cho đối tượng lớp phủ được chỉ định.

tôi đề nghị bạn tạo ra một trường hợp cho nó trong Apple's bug report

+1

Cảm ơn vì điều này. Điều này giúp mã hoạt động và loại bỏ các cảnh báo. –

+0

trả lại nil là cho tôi lỗi. vậy hãy giúp tôi –

5

Đừng trở lại con số không. Điều này chỉ được gọi cho các lớp phủ bạn tạo, vì vậy thay vì kiểm tra xem lớp phủ có phải là MKPolyline hay không, hãy kiểm tra xem lớp phủ của bạn là lớp phủ nào. Nếu bạn chỉ có một, trả về kết xuất polyline đã chỉ định mà không kiểm tra xem nó là cái gì.

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