質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

790閲覧

初心者です。複数のRSSデータをダウンロードしたいです

tekimu

総合スコア6

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2020/02/18 13:04

編集2020/02/18 13:26

前提・実現したいこと

SwiftにてRSSリーダーを作ろうとしています。初心者です。
色々検索して、なんとか一つのURLでなら表示できるようになりましたが、XMLParserを使って複数のURlをダウンロードしてTableVIewに表示させたいです。
お願いします。

該当のソースコード

swift

import UIKit class ListViewController : UITableViewController, XMLParserDelegate{ var parser:XMLParser! var items = [Item]() var item:Item? var curretString = "" var read = [String]() override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ return items.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = items[indexPath.row].title let link = items[indexPath.row].link if self.read.contains(link){ cell.textLabel?.font = UIFont.systemFont(ofSize: 17) }else { cell.textLabel?.font = UIFont.boldSystemFont(ofSize: 17) } return cell } override func viewDidAppear(_ animated :Bool){ super.viewDidAppear(animated) startDownload() } override func viewDidDisappear(_ animated: Bool) { UserDefaults.standard.set(self.read, forKey: "read") } override func viewDidLoad() { super.viewDidLoad() let refresh = UIRefreshControl() refresh.addTarget (self, action: #selector(self.startDownload), for: UIControl.Event.valueChanged) self.refreshControl = refresh if let read = UserDefaults.standard.object(forKey: "read") as? [String]{ self.read = read } } @objc func startDownload(){ self.items = [] if let url = URL(string:"http://takuyayoshimura.com/feed/") { if let parser = XMLParser(contentsOf: url){ self.parser = parser self.parser.delegate = self self.parser.parse() } } }//URLをもっと追加したい func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]){ self.curretString = "" if elementName == "item"{ self.item = Item() } } func parser(_ parser: XMLParser, foundCharacters string: String) { self.curretString += string } func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { switch elementName { case "title": self.item?.title = curretString case "link": self.item?.link = curretString case "item": self.items.append(self.item!) default : break } } func parserDidEndDocument(_ parser: XMLParser){ self.tableView.reloadData() self.refreshControl?.endRefreshing() } override func prepare(for segue : UIStoryboardSegue, sender: Any?){ if let indexPath = self.tableView.indexPathForSelectedRow { let item = items[indexPath.row] let controller = segue.destination as! DetailViewController controller.title = item.title controller.link = item.link self.read.append(item.link) } } }
import Foundation class Item{ var title = "" var link = "" }
import UIKit import WebKit class DetailViewController : UIViewController{ @IBOutlet weak var webView: WKWebView! var link:String! override func viewDidLoad() { super.viewDidLoad() if let url = URL(string: self.link){ let request = URLRequest(url: url) self.webView.load(request) } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問