2017-09-01 9 views
12

私は(サブクラスのインスタンスはMKPolylineRenderer自分自身を返したことで)自分自身の個々の色を保存するためにMKPolylineMKGeodesicPolylineをサブクラス化しようとしています。それはMKPolylineのために正常に動作しますが、私のMKGeodesicPolylineサブクラスのインスタンスは、サブクラスではありません - 単にMKGeodesicPolyline秒。なぜ誰かが説明できますか?ここでmapLine.colourプロパティにアクセスする私のコードは...サブクラスMKGeodesicPolyline

protocol MapLineProtocol: MKOverlay { 
    var width: CGFloat { get set } 
    var colour: UIColor { get set } 
} 
extension MapLineProtocol { 
    var renderer: MKPolylineRenderer { 
     let polylineRenderer = MKPolylineRenderer(overlay: self) 
     polylineRenderer.strokeColor = self.colour 
     polylineRenderer.lineWidth = self.width 
     return polylineRenderer 
    } 
} 
class MapLine: MKPolyline, MapLineProtocol { 
    var width: CGFloat = 3 
    var colour: UIColor = .blue 
    convenience init(start: CLLocationCoordinate2D, end: CLLocationCoordinate2D) { 
     let line = [start, end] 
     self.init(coordinates: line, count: line.count) 
    } 
} 
class MapGeodesic: MKGeodesicPolyline, MapLineProtocol { 
    var width: CGFloat = 3 
    var colour: UIColor = .red 
    convenience init(start: CLLocationCoordinate2D, end: CLLocationCoordinate2D) { 
     let line = [start, end] 
     self.init(coordinates: line, count: line.count) 
    } 
} 

let mapLine = MapLine(start: loc.coordinate, end: end) 
print("Mapline subclass: \(mapLine)") // <Appname.MapLine: xxx> 
self.mapView.add(mapLine) 
let geoLine = MapGeodesic(start: loc.coordinate, end: end) 
print("Geodesic subclass: \(geoLine)") // <MKGeodesicPolyline: xxx> !!! 
self.mapView.add(geoLine) 

(レンダラの作品)罰金されていますが、ジオラインに.colourにアクセスすることは、もちろん、レンダラを実行時例外が発生する(と色をバイパスしても機能しません)。誰でも説明できますか?

+0

を作りますか?私はあなたのコードがどのようにコンパイルできるのだろうか。 –

+1

スウィフト4.そして実際、本当の問題は、私のコードはコンパイルする方法はありませんが、MapKitがひどく、我々は実行時間を取得することを確認スウィフトの型を破るのではなく、時間のエラーをコンパイルするためにどのような策略を立ち上がっありません! – Grimxn

答えて

0

は...正確な問題をキャッチすることはできないのですが、私の分析に基づいて.. MKGeodesicPolylineはMKPolylineから継承されます。あなたはMKGPも利便性の初期化を使用して起因するものと、親MKPを初期化します初期化するときに使用しているSWIFTのバージョンは何だと思ういくつかの混乱..

+0

私はそれが正しい答えだと思います。私もこの問題に見て、これが唯一のスウィフト4でコンパイルされることに気づいた(そして、それは正当な理由のためにコンパイルされません) –