🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

RSS

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

1回答

1615閲覧

Swift RSS pubDate("Wed, 04 Nov 2019 15:02:11 +0000")を取得し("2019-11-4")のように変換してtableViewCellに反映したい

taroooth

総合スコア20

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

RSS

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2019/11/19 20:19

ブログをまとめた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 }

投げっぱなしな質問になってしまって申し訳ありません。よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ItemのdateをStringからDate型に変更して、
self.item?.date = currentString のところでcurrentStringではなくcurrentStringをもとに生成したDateにするとよいと思います

投稿2019/11/19 22:52

thyda.eiqau

総合スコア2982

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

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

taroooth

2019/11/19 23:11

回答ありがとうございます! 勉強不足で申し訳ないのですが、currentStringをもとに生成したDateにするとは、具体的にどうすれば良いのでしょうか?
thyda.eiqau

2019/11/20 13:35

dateFormatter.date(from: currentString) でDate型のインスタンスを生成できるのはわかりますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問