Ada*_*ach 2 swift swift-extensions
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)
}
}
Run Code Online (Sandbox Code Playgroud)
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 {
Run Code Online (Sandbox Code Playgroud)
我没想到能够分配给自己,但我确实希望能够分配给结构的成员.如何才能做到这一点?
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 {
...
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |