【发布时间】: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 并让它扩展自己的边界(变异自我)而不是返回一个新的边界。我的代码示例令人困惑-抱歉,剪切和粘贴。现已修复。