首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新MKMapRect扩展的Swift语法

更新MKMapRect扩展的Swift语法
EN

Stack Overflow用户
提问于 2019-04-11 23:00:35
回答 1查看 287关注 0票数 2

我正在使用一个扩展,它可以帮助我的地图上的图钉在点击时聚集和扩展。随着从Swift 4到Swift 4.2的更新,以及现在的Swift 5,每当我使用建议的新Swift语法时,我的应用程序都会兑现。

这是我在Swift 4中的当前代码:

代码语言:javascript
复制
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语法:

代码语言:javascript
复制
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))
}
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-11 23:07:34

您根本不需要任何与这些点相关的属性,因为它们已经存在于Swift 5中,并且与您为它们提供的名称相同。intersects也是如此。

您所需要的只是您的自定义初始化器和contains方法。

代码语言:javascript
复制
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))
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55635627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档