问题描述
我遵循此 article 但当我在我这边实施时出现错误。基本上,我想在我的项目中解析 GPX 文件。请指导我解决这个问题。
protocol GpxParsing: NSObjectProtocol {
func parser(_ parser: GpxParser,didCompleteParsing locations: Queue<CLLocation>)
}
class GpxParser: NSObject,XMLParserDelegate {
private var locations: Queue<CLLocation>
weak var delegate: GpxParsing?
private var parser: XMLParser?
init(forResource file: String,ofType typeName: String) {
self.locations = Queue<CLLocation>()
super.init()
if let content = try? String(contentsOfFile: Bundle.main.path(forResource: file,ofType: typeName)!) {
let data = content.data(using: .utf8)
parser = XMLParser.init(data: data!)
parser?.delegate = self
}
}
func parse() {
self.parser?.parse()
}
func parser(_ parser: XMLParser,didStartElement elementName: String,namespaceURI: String?,qualifiedname qName: String?,attributes attributeDict: [String : String] = [:]) {
switch elementName {
case "trkpt":
if let latString = attributeDict["lat"],let lat = Double.init(latString),let lonString = attributeDict["lon"],let lon = Double.init(lonString) {
locations.enqueue(CLLocation(latitude: lat,longitude: lon))
}
default: break
}
}
func parserDidEndDocument(_ parser: XMLParser) {
delegate?.parser(self,didCompleteParsing: locations)
}
}
解决方法
文章很清楚地告诉你:
实现队列应该是微不足道的(或者是一个很好的练习)。
也就是说,作者没有包含Queue的实现;相反,作者邀请你来写它。正如作者所暗示的那样,这是一个让您了解 Queue 是什么并编写它的通用 Swift 实现的机会。没有队列类型,因为你没有写,因为文章的作者邀请你这样做。如果您不愿意自己进行一些思考和编码,这不是一篇适合您复制的好文章。