前提・実現したいこと
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) } } }
現状ですとどこまで理解してどこからが分からないか、判断できません。どのようなところを解決したいのかを[質問するときのヒント](https://teratail.com/help/question-tips)や[推奨していない質問](https://teratail.com/help/avoid-asking)をよく読んで質問を編集してはいかがでしょうか。
あなたの回答
tips
プレビュー