Обновление синтаксиса Swift для расширения MKMapRect

#ios #swift #swift4 #mapkit #swift5

#iOS #swift #swift4 #mapkit #swift5

Вопрос:

Я использую расширение, которое помогает выводам на моей карте группироваться и расширяться при нажатии. С обновлением с Swift 4 до Swift 4.2, а теперь и Swift 5, мое приложение кэшируется всякий раз, когда я использую предложенный новый синтаксис Swift.

Вот мой текущий код в Swift 4:

 extension MKMapRect {
init(minX: Double, minY: Double, maxX: Double, maxY: Double) {
    self.init(x: minX, y: minY, width: abs(maxX - minX), height: abs(maxY - minY))
}
init(x: Double, y: Double, width: Double, height: Double) {
    self.init(origin: MKMapPoint(x: x, y: y), size: MKMapSize(width: width, height: height))
}
var minX: Double { return MKMapRectGetMinX(self) }
var minY: Double { return MKMapRectGetMinY(self) }
var midX: Double { return MKMapRectGetMidX(self) }
var midY: Double { return MKMapRectGetMidY(self) }
var maxX: Double { return MKMapRectGetMaxX(self) }
var maxY: Double { return MKMapRectGetMaxY(self) }
func intersects(_ rect: MKMapRect) -> Bool {
    return MKMapRectIntersectsRect(self, rect)
}
func contains(_ coordinate: CLLocationCoordinate2D) -> Bool {
    return MKMapRectContainsPoint(self, MKMapPointForCoordinate(coordinate))
}
}
  

Я получаю сообщение об ошибке «‘MKMapRectGetMinX’ был заменен свойством ‘MKMapRect.minX'» для всех моих переменных.

Вот обновленный синтаксис Swift 5, который не работает:

 extension MKMapRect {
init(minX: Double, minY: Double, maxX: Double, maxY: Double) {
    self.init(x: minX, y: minY, width: abs(maxX - minX), height: abs(maxY - minY))
}
init(x: Double, y: Double, width: Double, height: Double) {
    self.init(origin: MKMapPoint(x: x, y: y), size: MKMapSize(width: width, height: height))
}
var minX: Double { return self.minX }
var minY: Double { return self.minY }
var midX: Double { return self.midX }
var midY: Double { return self.midY }
var maxX: Double { return self.maxX }
var maxY: Double { return self.maxY }
func intersects(_ rect: MKMapRect) -> Bool {
    return self.intersects(rect)
}
func contains(_ coordinate: CLLocationCoordinate2D) -> Bool {
    return self.contains(MKMapPoint.init(coordinate))
}
}
  

С этим новым синтаксисом все пути через эту функцию будут вызывать саму себя. Надеюсь, кто-нибудь может дать мне несколько альтернатив.

Комментарии:

1. Вы можете просто удалить те, которые выдают предупреждение

Ответ №1:

Вам просто не нужны какие-либо свойства, связанные с точками, поскольку они уже существуют в Swift 5 с тем же именем, которое вы им дали. То же самое верно для intersects .

Все, что вам нужно, это ваши пользовательские инициализаторы и contains метод.

 extension MKMapRect {
    init(minX: Double, minY: Double, maxX: Double, maxY: Double) {
        self.init(x: minX, y: minY, width: abs(maxX - minX), height: abs(maxY - minY))
    }

    init(x: Double, y: Double, width: Double, height: Double) {
        self.init(origin: MKMapPoint(x: x, y: y), size: MKMapSize(width: width, height: height))
    }

    func contains(_ coordinate: CLLocationCoordinate2D) -> Bool {
        return self.contains(MKMapPoint.init(coordinate))
    }
}