Skip to content

Instantly share code, notes, and snippets.

@MihaelIsaev
Created April 13, 2015 21:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save MihaelIsaev/d05824952b486f6d55ff to your computer and use it in GitHub Desktop.
Save MihaelIsaev/d05824952b486f6d55ff to your computer and use it in GitHub Desktop.
SwiftRSSParser
//
// TableViewController.swift
// RSSParser
//
// Created by mihael on 14/04/15.
// Copyright (c) 2015 Mihael Isaev inc. All rights reserved.
//
import UIKit
struct Post {
var title: String!
var link: String!
var date: String!
}
class TableViewController: UITableViewController, NSXMLParserDelegate {
var posts:[Post] = []
var parser = NSXMLParser()
var tempPost: Post? = nil
var tempElement: String?
override func viewDidLoad() {
super.viewDidLoad()
parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://lenta.ru/rss")))!
parser.delegate = self
parser.parse()
}
//MARK: - XMLParser Delegate
func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) {
println("parse error: \(parseError)")
}
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
tempElement = elementName
if elementName == "item" {
tempPost = Post(title: "", link: "", date: "")
}
}
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "item" {
if let post = tempPost {
posts.append(post)
}
tempPost = nil
}
}
func parser(parser: NSXMLParser, foundCharacters string: String?) {
if let post = tempPost, let str = string {
if tempElement == "title" {
tempPost?.title = post.title+str
} else if tempElement == "link" {
tempPost?.link = post.link+str
} else if tempElement == "pubDate" {
tempPost?.date = post.date+str
}
}
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell
cell.textLabel?.text = posts[indexPath.row].title
cell.detailTextLabel?.text = posts[indexPath.row].date
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println(posts[indexPath.row].link)
}
}
@NewDestinyWay
Copy link

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment