我正在为 WinDev 中的应用程序开发一个额外的 GPS 模块。WinDev 支持 Swift 代码,但只支持不使用类和全局变量的方法。这是我所做的(基本上基于Apple doc):
import Foundation
import CoreLocation
import UIKit
class mod_GPS : NSObject, CLLocationManagerDelegate {
var distance = Double()
var location_last : [CLLocation] = []
let locationManager = CLLocationManager()
func startReceivingLocationChanges() {
// Do some stuff (basically what is write on doc)
}
internal func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let lastLocation = locations.last!
if (location_last.count != 0){
distance = distance + lastLocation.distance(from: location_last[0])
location_last[0] = lastLocation
}else{
distance = 0
location_last.append(lastLocation)
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
//Same
}
}
所以这里我们有一些代码来创建一个对象并计算用户移动时的距离。但这不能处理WinDev。问题在于:“let locationManager = CLLocationManager()”必须是全局的。所以我想知道是否有办法避免全局变量。
首先我尝试这样的事情:在每次调用 LocationManage(didUpdateLocation) 时快速写入磁盘的部分和 WinDev 中的部分在他想要的时候读取值。但这并不能解决问题,因为我仍然需要在 WinDev 部分启动变量 locationManager。然后我想到了 Java 中存在的匿名类,但在 swift 和客观的 C 中似乎缺少它。
此外,WinDev 开发人员社区和文档完全是 AFK,所以我没想到会以这种方式提供帮助。我显然不知道如何做这部分。如果有人有想法或提示......我会很高兴听到他们的声音。