私は(サブクラスのインスタンスはMKPolylineRenderer
自分自身を返したことで)自分自身の個々の色を保存するためにMKPolyline
とMKGeodesicPolyline
をサブクラス化しようとしています。それは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
にアクセスすることは、もちろん、レンダラを実行時例外が発生する(と色をバイパスしても機能しません)。誰でも説明できますか?
を作りますか?私はあなたのコードがどのようにコンパイルできるのだろうか。 –
スウィフト4.そして実際、本当の問題は、私のコードはコンパイルする方法はありませんが、MapKitがひどく、我々は実行時間を取得することを確認スウィフトの型を破るのではなく、時間のエラーをコンパイルするためにどのような策略を立ち上がっありません! – Grimxn