import Foundation class MoebooruPostXMLParser: NSObject, XMLParserDelegate { private var posts: [MoebooruPost] = [] func parse(data: Data) -> [MoebooruPost] { let parser = XMLParser(data: data) parser.delegate = self parser.parse() return posts } func parser(_: XMLParser, didStartElement elementName: String, namespaceURI _: String?, qualifiedName _: String?, attributes attributeDict: [String: String]) { if elementName == "post", let id = Int(attributeDict["id"] ?? ""), let createdAtTimestamp = TimeInterval(attributeDict["created_at"] ?? ""), let score = Int(attributeDict["score"] ?? ""), let width = Int(attributeDict["width"] ?? ""), let height = Int(attributeDict["height"] ?? "") { posts.append(MoebooruPost( id: id, tags: attributeDict["tags"]?.components(separatedBy: " ") ?? [], createdAt: Date(timeIntervalSince1970: createdAtTimestamp), author: attributeDict["author"] ?? "", source: URL(string: attributeDict["source"] ?? ""), score: score, fileURL: URL(string: attributeDict["file_url"] ?? ""), previewURL: URL(string: attributeDict["preview_url"] ?? ""), sampleURL: URL(string: attributeDict["sample_url"] ?? ""), jpegURL: URL(string: attributeDict["jpeg_url"] ?? ""), width: width, height: height )) } } }