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

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

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

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

Swift

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

Q&A

解決済

1回答

1068閲覧

とあるサイトを参考にして、SwiftによるシンプルなRSSリーダーアプリ(ニュースリーダー)を作っています

tora-

総合スコア3

RSS

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

Swift

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

0グッド

0クリップ

投稿2020/05/30 23:28

編集2020/05/31 07:41

前提・実現したいこと

とあるサイト(http://webfood.info/swift-rss-reader/)を参考にして、SwiftによるシンプルなRSSリーダーアプリ(ニュースリーダー)を作っているのですがどのように解決したらよいかわからないエラーが出てきてしまいました。どなたか解決方法を教えてくだされば幸いです。
TableViewController.swiftを実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラー文1:Cannot override with a stored property 'parent' エラー文2:Cannot infer contextual base in reference to member 'get' エラー文3:Module 'Alamofire' has no member named 'request'

該当のソースコード

ViewController.swift

import UIKit import PageMenu class ViewController: UIViewController { var pageMenu : CAPSPageMenu? override func viewDidLoad() { super.viewDidLoad() var controllers : [UIViewController] = [] /* for i in 1...4 { let controller = TableViewController( nibName: "TableViewController", bundle: nil ) controller.title = "MENU" + String(i) controllers.append(controller) } */ var feeds: [Dictionary<String, String>] = [ [ "link": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://menthas.com/top/rss", "title": "top" ], [ "link": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://menthas.com/ruby/rss", "title": "ruby" ], [ "link": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://menthas.com/ios/rss", "title": "ios" ], [ "link": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://menthas.com/infrastructure/rss", "title": "infrastructure" ], ] for feed in feeds { let feedController = TableViewController(nibName: "TableViewController", bundle: nil) feedController.parent = self //1つ目のエラー feedController.fetchFrom = feed["link"]! //2つ目のエラー feedController.title = feed["title"] controllers.append(feedController) } let params: [CAPSPageMenuOption] = [ .ScrollMenuBackgroundColor(UIColor.black), .ViewBackgroundColor(UIColor.white), .SelectionIndicatorColor(UIColor.orange), .MenuItemFont(UIFont(name: "HelveticaNeue", size: 15.0)!), .MenuHeight(80.0), .MenuItemWidth(90.0), .CenterMenuItems(true) ] pageMenu = CAPSPageMenu( viewControllers: controllers, frame: CGRect( x: 0.0, y: 0.0, width: self.view.frame.width, height: self.view.frame.height ), pageMenuOptions: params ) self.addChild(pageMenu!) self.view.addSubview(pageMenu!.view) pageMenu!.didMove(toParent: self) } }

TableViewController.swift

import UIKit import Alamofire import SwiftyJSON class TableViewController: UITableViewController { var fetchFrom: String? var parent: UIViewController? //エラー文1が表示 override func viewDidLoad() { super.viewDidLoad() Alamofire.request(fetchFrom!,method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON { response in //ここでエラー文2、3が表示 if let values = response.result.value { JSON(values)["responseData"]["feed"]["entries"].forEach {i,value in print(value["title"].string!) print(value["link"].string!) } } } // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem } // MARK: - Table view data source override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 0 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return 0 } }
swift

試したこと

Webサイトを見たのですが解決方法がわかりませんでした

補足情報(FW/ツールのバージョンなど)

http://webfood.info/swift-rss-reader/
このWebサイトを参考にしてアプリを開発しようとしていました。

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

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

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

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

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

TsukubaDepot

2020/05/31 00:53

リンク先を見るとableViewController.swiftを実装する必要があるとのことですが、こちらは入力済みでしょうか。もし入力済みであれば参考のためにソースコードとして質問本文に追加していただければと思います。 ソースコードは```で括っていただけれると見やすくなるのでご協力お願いします。 あと気になったのは、リンク先はSwift2.2とかなり古い書式になっています。現行のSwift5にかなり書き換える必要がありそうですが、その辺りは大丈夫でしょうか。
guest

回答1

0

ベストアンサー

参考になされた記事の更新日時は2019年8月26日となっていますが、サンプルコードの最終更新日時(GitHubにあげてあるもの)の最終更新日時は2016年4月25日と実質4年間メンテナンスされていないコードのようです。

また、サンプル中で使われているPageMenuというフレームワークも2018年8月24日をもって更新が終了していますし、「 I won't be able to maintain this library any longer and upgrade this library」とある通り今後の更新も見込めません。

加えて、参考にされている記事の環境が「Swift2.2/Xcode7.3」と極めて古いため、そこそこ手を入れないとコンパイルすら通らないと思います(少なくともPageMenuについては4.2以前の書き方が大量にあったため手を入れる必要がありました)。

が、とりあえず通すための手順についてコメントします。

エラー文1:Cannot override with a stored property 'parent'

これは、TableViewControllerの親クラスであるUITableViewControllerで既にparentというプロパティ(変数)が定義されているために出るエラーです。

swift

1class TableViewController: UITableViewController { 2 var fetchFrom: String? 3 //var parent: UIViewController? //エラー文1が表示

といった感じにコメントアウトしても大丈夫です。

エラー文2:Cannot infer contextual base in reference to member 'get'

質問者さんのコードをそのまま使いましたが、これは私の環境では発生しませんでした。

TableViewControllerの作成
にあるように、xibファイルを作る手順に従ってファイルの追加や作成を行いましたでしょうか。

エラー文3:Module 'Alamofire' has no member named 'request'

これは、ダウンロードしたAlamofireのバージョンが異なるために起きたエラーだと思います。

サンプルの Podfile の一部を見ると

Podfile

1target 'RssReaderApp' do 2 pod 'PageMenu' 3 pod 'Alamofire' 4 pod 'SwiftyJSON' 5end

となっていますが、このままだとAlamofireは最新版の5.x系となります。

書式的に4.x系なので、Podfileを

Podfile

1target 'RssReaderApp' do 2 pod 'PageMenu' 3 pod 'Alamofire', '<5.0' 4 pod 'SwiftyJSON' 5end

とすることで、5.0未満(現時点では4.9.1が4.x系の最新版)をダウンロードすることが可能です。
Podfileを更新したあと、あらためてpod installを実行しダウングレードした上コンパイルを行えばエラーが消えると思います。

ちなみに、テキストの

Swift

1 let params: [CAPSPageMenuOption] = [ 2 .ScrollMenuBackgroundColor(UIColor.black), 3 .ViewBackgroundColor(UIColor.white), 4 .SelectionIndicatorColor(UIColor.orange), 5 .MenuItemFont(UIFont(name: "HelveticaNeue", size: 15.0)!), 6 .MenuHeight(80.0), 7 .MenuItemWidth(90.0), 8 .CenterMenuItems(true) 9 ]

の部分も全て間違っているようです。

Swift

1 let params: [CAPSPageMenuOption] = [ 2 .scrollMenuBackgroundColor(UIColor.black), 3 .viewBackgroundColor(UIColor.white), 4 .selectionIndicatorColor(UIColor.orange), 5 .menuItemFont(UIFont(name: "HelveticaNeue", size: 15.0)!), 6 .menuHeight(80.0), 7 .menuItemWidth(90.0), 8 .centerMenuItems(true) 9 ]

とする必要がありますのでご注意ください。

投稿2020/05/31 20:49

TsukubaDepot

総合スコア5086

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問