【问题标题】:Updating Swift Syntax for MKMapRect Extension更新 MKMapRect 扩展的 Swift 语法
【发布时间】:2019-09-02 06:35:06
【问题描述】:

我正在使用一个扩展程序来帮助我地图上的图钉在被点击时聚集和扩展。随着从 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))
}
}

使用这种新语法,通过此函数的所有路径都将调用自身。希望有人能给我一些替代方案。

【问题讨论】:

  • 您可以删除发出警告的那些

标签: ios swift swift4 mapkit swift5


【解决方案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))
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2014-01-15
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多