Swift结构扩展函数-“;无法分配给';原产地';在';自我'&引用;

Swift结构扩展函数-“;无法分配给';原产地';在';自我'&引用;,swift,swift-extensions,Swift,Swift Extensions,Swift中的结构可以包含函数,也可以具有扩展。酷!看起来是一种让更多类可以使用此函数并减少参数传递的好方法。以下是函数最初在地图视图控制器中的显示方式: func expandTrackRectToCoordinate(coordinate : CLLocationCoordinate2D) { let point = MKMapPointForCoordinate(coordinate) let newRect = MKMapRectMake(point.x, po

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上的扩展(部分-直到出现错误时才显示):

扩展名MKMapRect{ func expandToIncludeCoordinate(坐标:CLLocationCoordinate2D){ 设点=MKMapPointForCoordinate(坐标) 设newRect=MKMapRectMake(点.x,点.y,0.0,0.0) 如果MKMapRectIsNull(self){
Swift中的self.origin=point结构通常被认为是不可变的,除非您特别将其方法标记为
mutating

extension MKMapRect {

    mutating 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

            // Another problem here is that CGSize is not the same as MKMapSize
            self.size = MKMapSize(width: 0, height: 0)
        } else {
            ...
            ...
        }
    }
}

func
之前添加
mutating
关键字,这样你就可以对结构进行变异了——我想要一个MKMapRect,让它扩展自己的边界(mutate self)而不是返回一个新的。我的代码示例很混乱-抱歉,剪切并粘贴。现在已修复。在这种情况下,他必须决定要做什么。鉴于他尝试使用
self
,我觉得他似乎想对其进行变异。不过,很好,我应该修复示例代码
extension MKMapRect {

    mutating 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

            // Another problem here is that CGSize is not the same as MKMapSize
            self.size = MKMapSize(width: 0, height: 0)
        } else {
            ...
            ...
        }
    }
}