Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?


More than 1 year has passed since last update.





import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, XMLParserDelegate {

    @IBOutlet weak var tableView: UITableView!

    //URLを取得するメソッド文(let feedurl = URL(string"RSS名")
    let feedUrl = URL(string: "https://news.yahoo.co.jp/pickup/rss.xml")!
    var feedItems = [FeedItem]()

    var currentElementName : String! // RSSパース中の現在の要素名

    let ITEM_ELEMENT_NAME = "item"
    let TITLE_ELEMENT_NAME = "title"
    let LINK_ELEMENT_NAME   = "link"

    //セルの行数 TableViewに表示するセルの数を返却します。UITableView に表示したいセルの数を教えるためのメソッド
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.feedItems.count

    //セルのテキストを追加 各セルを生成して返却します。
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //セルを作成します。            セルのスタイル。
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "Cell")
        let feedItem = self.feedItems[indexPath.row]
        cell.textLabel?.text = feedItem.title
        return cell


    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let feedItem = self.feedItems[indexPath.row]
        //アプリケーションの中から指定されたURLを Safari で開きたい場合があります。 Swift で Safari を開くには、以下のようにプログラムで実現できます。
        UIApplication.shared.open(URL(string: feedItem.url)!, options: [:], completionHandler: nil)

    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
        self.currentElementName = nil
        if elementName == ITEM_ELEMENT_NAME {
        } else {
            currentElementName = elementName

    //タグ以外を読み込んだ時。開始タグと終了タグでくくられたデータがあったときに実行されるメソッド<title>tesut</title> testの部分がStrigに帰ってくること
    func parser(_ parser: XMLParser, foundCharacters string: String) {
        if self.feedItems.count > 0 {
            let lastItem = self.feedItems[self.feedItems.count - 1]
            switch self.currentElementName {
            case TITLE_ELEMENT_NAME:
                let tmpString = lastItem.title
                lastItem.title = (tmpString != nil) ? tmpString! + string : string
            case LINK_ELEMENT_NAME:
                lastItem.url = string
            default: break

    // 解析中に要素の終了タグがあったときに実行されるメソッド
    func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        self.currentElementName = nil

    // XML解析終了時に実行されるメソッド。通信が終わってデータが正常に取得できたらテーブルをリロードして表示する
    func parserDidEndDocument(_ parser: XMLParser) {

    override func viewDidLoad() {
        let parser: XMLParser! = XMLParser(contentsOf: feedUrl)
        parser.delegate = self

    override func didReceiveMemoryWarning() {
        // Dispose of any resources that can be recreated.

class FeedItem {
    var title: String!
    var url: String!


URLを取得するメソッド文(let feedurl = URL(string"RSS名")

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away