swift初学者です。
現在RSSを用いたアプリを作成しています。
特定のキーワードが含まれた内容だけを表示させたいのですが、いろいろ調べてみてもうまくいきません。
どなたかご教授をお願いします。
(検索できるようにではなく、予め設定したワードを含む検索結果を出したいです!)
swift
1import UIKit 2import SegementSlide 3 4class pege1Controller: UITableViewController,SegementSlideContentScrollViewDelegate,XMLParserDelegate { 5 6 var perser = XMLParser() 7 8 var currentElementName:String! 9 10var newsItems = [NewsItems]() 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 tableView.backgroundColor = .clear 15 16 let image = UIImage(named: "0") 17 let imageview = UIImageView(frame:CGRect(x: 0, y: 0, width: self.tableView.frame.size.width, height: self.tableView.frame.size.height)) 18 19 imageview.image = image 20 self.tableView.backgroundView = imageview 21 22// XNLパース 23 let urlString = "https://www.lifehacker.jp/feed/index.xml" 24 let url:URL = URL(string:urlString)! 25 perser = XMLParser(contentsOf: url)! 26 perser.delegate = self 27 perser.parse() 28 29 30 } 31 32 @objc var scrollView:UIScrollView{ 33 34 return tableView 35 } 36 37 // MARK: - Table view data source 38 39 override func numberOfSections(in tableView: UITableView) -> Int { 40 // #warning Incomplete implementation, return the number of sections 41 return 1 42 } 43 44 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 45 // #warning Incomplete implementation, return the number of rows 46 return newsItems .count 47 } 48 49 override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 50 51 return view.frame.size.height/5 52 } 53 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 54 let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "Cell") 55 56 cell.backgroundColor = .clear 57 let newsItem = self.newsItems[indexPath.row] 58 59 cell.textLabel?.text = newsItem.title 60 cell.textLabel?.font = UIFont.boldSystemFont(ofSize: 15.0) 61 cell.textLabel?.textColor = .white 62 cell.textLabel?.numberOfLines = 3 63 64 cell.detailTextLabel?.text = newsItem.url 65 cell.detailTextLabel?.textColor = .red 66 67 return cell 68 } 69 70 func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { 71 72 currentElementName = nil 73 if elementName == "item"{ 74 75 self.newsItems.append(NewsItems()) 76 77 }else{ 78 79 currentElementName = elementName 80 } 81 } 82 func parser(_ parser: XMLParser, foundCharacters string: String) { 83 84 if self.newsItems.count > 0{ 85 86 let lastItems = self.newsItems[self.newsItems.count - 1] 87 88 89 90 switch self.currentElementName { 91 case "title":lastItems.title = string 92 case "link":lastItems.url = string 93 case "pubDate":lastItems.pubDate = string 94 95 default:break 96 97 98 } 99 } 100 } 101 102 func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 103 self .currentElementName = nil } 104 105 func parserDidEndDocument(_ parser: XMLParser) { 106 self .tableView.reloadData() 107 } 108 109 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 110 111 let webviewController = webViewController() 112 webviewController.modalTransitionStyle = .crossDissolve 113 114 let newsItem = newsItems[indexPath.row] 115 UserDefaults.standard.set(newsItem.url, forKey: "url") 116 present(webviewController,animated: true,completion:nil) 117 118 }
import Foundation class NewsItems{ var title:String? var url:String? var pubDate:String? }
回答1件
あなたの回答
tips
プレビュー