Swift の構造体には、関数を含めることができ、拡張機能を含めることができます。涼しい!この関数をより多くのクラスで利用できるようにし、引数の受け渡しを減らすための巧妙な方法のように見えます。マップ ビュー コントローラーで関数が最初に表示された方法を次に示します。
func expandTrackRectToCoordinate(coordinate : CLLocationCoordinate2D) {
let point = MKMapPointForCoordinate(coordinate)
let newRect = MKMapRectMake(point.x, point.y, 0.0, 0.0)
if MKMapRectIsNull(trackRect) {
trackRect = MKMapRectMake(point.x, point.y, 0.0, 0.0)
} else {
trackRect = MKMapRectUnion(trackRect, newRect)
}
}
trackRect
クラスの MKMapRect メンバーでした。
MKMapRect は展開されて各ポイントが含まれるようになり、必要に応じてマップをリージョン全体にリセットしてすべてのポイントを表示できるようになります。
これを MKMapRect の拡張機能にしようとしました (部分的 - エラーまで表示されます):
extension MKMapRect {
func expandToIncludeCoordinate(coordinate : CLLocationCoordinate2D) {
let point = MKMapPointForCoordinate(coordinate)
let newRect = MKMapRectMake(point.x, point.y, 0.0, 0.0)
if MKMapRectIsNull(self) {
self.origin = point <-------- Cannot assign to 'origin' in 'self'
self.size = CGSizeZero
} else {
自分自身に代入できるとは思っていませんでしたが、構造体のメンバーに代入できるとは思っていました。これはどのように行うことができますか?