gpt4 book ai didi

Swift 结构扩展函数 - "Cannot assign to ' origin' in 'self' "

转载 作者:可可西里 更新时间:2023-11-01 00:37:54 24 4
gpt4 key购买 nike

Swift 中的结构可以包含函数并且可以有扩展。凉爽的!看起来是一种使此函数可用于更多类并减少参数传递的巧妙方法。这是函数最初在 map View Controller 中的样子:

    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 扩展以包含每个点,以便 map 可以根据需要重置为整个区域,显示所有点。

我试图将其作为 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 {

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

最佳答案

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

关于Swift 结构扩展函数 - "Cannot assign to ' origin' in 'self' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com