【问题标题】:Swift struct extension function - "Cannot assign to 'origin' in 'self'"Swift 结构扩展功能 - “不能分配给‘self’中的‘origin’”
【发布时间】:2015-02-23 12:49:36
【问题描述】:

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 {

我没想到只能分配给自己,但我确实希望能够分配给结构的成员。如何做到这一点?

【问题讨论】:

  • func 之前添加 mutating 关键字,以便您可以改变结构
  • 就是这样 - 我想要一个 MKMapRect 并让它扩展自己的边界(变异自我)而不是返回一个新的边界。我的代码示例令人困惑-抱歉,剪切和粘贴。现已修复。

标签: swift swift-extensions


【解决方案1】:

Swift 中的结构通常被认为是不可变的,除非你特别将它们的方法标记为 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 {
            ...
            ...
        }
    }
}

Reference

【讨论】:

  • 好吧,在这种情况下,他必须决定他想做什么。鉴于他尝试使用self,在我看来他想改变它。不过好点,我应该修复示例代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
相关资源
最近更新 更多