2015-06-10 16 views
6

Trong Swift 1.2 Tôi có điều này:Swift 2 MKMapViewDelegate rendererForOverlay optionality

class UVC: NSViewController, MKMapViewDelegate { 
    // ... 

    // ************************************** 
    // MARK: MapView Delegate 
    // ************************************** 
    func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer! { 
     if overlay is OSGBTiles { 
      return OSGBTilesRenderer(tileOverlay: overlay as! OSGBTiles) 
     } else if overlay is ESRI { 
      return ESRIRenderer(shapeFileOverlay: overlay as! ESRI) 
     } else if overlay is MKTileOverlay { 
      return MKTileOverlayRenderer(overlay: overlay) 
     } else { 
      print("Unknown overlay") 
     } 
     return nil 
    } 
} 

Swift 2 đã thay đổi định nghĩa của mapView:rendererForOverlay đến nay trở MKOverlayRenderer hơn MKOverlayRenderer!, và sẽ không phải bây giờ cho phép tôi trở nil (gì ngạc nhiên) dưới dạng MKOverlayRenderer không phải là NilLiteralConvertible. Tuy nhiên, các tài liệu (trong Xcode 7) vẫn nói:

Return Value

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 trả về nil, không có nội dung nào được vẽ cho đối tượng lớp phủ được chỉ định.

Tôi phải trả lại điều gì nếu vượt qua lớp phủ mà tôi không nhận ra?

Trả lời

2

Theo MKMapView.h gần đây nhất, việc kê khai chức năng mới bây giờ là:

// Current renderer for overlay; returns nil if the overlay is not shown. 
@available(iOS 7.0, *) 
func rendererForOverlay(overlay: MKOverlay) -> MKOverlayRenderer? 
+0

Không chắc trong đó có chức năng bạn nói. Tôi đang nói về chức năng giao thức 'func mapView (mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer!' – Grimxn

+0

Oh xin lỗi, sai lầm của tôi. Thật thú vị là ngay cả phiên bản ObjC của điều này cũng chỉ rõ một sự trả về không null. Tôi đang tiếp tục tìm kiếm câu trả lời cho điều này ... –

+0

Thực ra tôi vừa mới nộp lỗi # 21581742 về vấn đề này. –

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