ブログをまとめたRSSリーダーのiOSアプリを作っています。
tableViewCellの"title"には記事タイトルを、"subTitle"には更新日を記載したいです。
現在、XMLパーサーを使って記事タイトル・更新日を取得できているのですが、更新日のフォーマットが"Wed, 04 Nov 2019 15:02:11 +0000"のようになっています。これを"2019-11-4"や"11月4日(水)"のように変換しようと方法を検索して、以下のようなコードを見つけました。
swift
1 // string = "Wed, 04 Nov 2015 15:02:11 +0000" 2 let identifier = NSLocale.current.identifier 3 if identifier == "ja_JP" { 4 let dateFormatter = DateFormatter() 5 // 書式が変わらない固定ロケールで一度値を取得 6 dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale 7 dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss ZZZZ" 8 let r_date = dateFormatter.date(from: "") 9 10 if let d = r_date { 11 // ロケールを日本語にして曜日を取得 12 dateFormatter.locale = NSLocale(localeIdentifier: "ja_JP") as Locale 13 dateFormatter.dateFormat = "MM月dd日(E)" 14 tmpEntry.add(dateFormatter.string(from: d)) 15 } 16 }
しかしこのコードをどこに記載すれば目的が達成できるのか分からず困っています。
以下ソースコード
ListViewController
1import UIKit 2 3class ListViewController1: UITableViewController, XMLParserDelegate { 4 5 var parser:XMLParser! 6 var items = [Item]() 7 var item:Item? 8 var currentString = "" 9 var tmpEntry : NSMutableArray! 10 11 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 12 return items.count 13 } 14 15 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 16 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 17 cell.textLabel?.text = items[indexPath.row].title 18 cell.detailTextLabel?.text = items[indexPath.row].date 19 //ラベルの表示行数を無制限にする 20 cell.textLabel?.numberOfLines = 0 21 return cell 22 } 23 24 func numberOfSectionsInTableView(tableView: UITableView) -> Int { 25 return 2 26 } 27 28 override func viewDidLoad() { 29 //テーブルの高さを自動で調節 30 self.tableView.rowHeight = UITableView.automaticDimension 31 } 32 override func viewDidAppear(_ animated: Bool) { 33 super.viewDidAppear(animated) 34 startDownload() 35 } 36 37 func startDownload() { 38 self.items = [] 39 if let url = URL(string: "https://www.ryukke.com/?feed=rss2") { 40 if let parser = XMLParser(contentsOf: url) { 41 self.parser = parser 42 self.parser.delegate = self 43 self.parser.parse() 44 } 45 } 46 } 47 48 func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 49 self.currentString = "" 50 if elementName == "item" { 51 self.item = Item() 52 } 53 54 } 55 56 func parser(_ parser: XMLParser, foundCharacters string: String) { 57 self.currentString += string 58 } 59 60 func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 61 switch elementName { 62 case "title": self.item?.title = currentString 63 case "link": self.item?.link = currentString 64 case "pubDate": self.item?.date = currentString 65 case "item": self.items.append(self.item!) 66 default : break 67 } 68 } 69 70 func parserDidEndDocument(_ parser: XMLParser) { 71 self.tableView.reloadData() 72 } 73 74 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 75 if let indexPath = self.tableView.indexPathForSelectedRow { 76 let item = items[indexPath.row] 77 let controller = segue.destination as! DetailViewController 78 controller.title = item.title 79 controller.link = item.link 80 } 81 } 82} 83
item
1import Foundation 2 3class Item { 4 var title = "" 5 var link = "" 6 var date = "" 7 }
投げっぱなしな質問になってしまって申し訳ありません。よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 23:11
2019/11/20 13:35