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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

1954閲覧

webサーバーに対してHTTP通信のリクエストを出してデータを取得する際に出てきたエラーを解決したいです

keeeeeek

総合スコア10

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/08/31 14:27

###前提・実現したいこと
swiftを使ってrssリーダーを作ろうとしています。

まず①ニュース情報の取得→②webサーバーに対してHTTP通信のリクエストを出してデータを取得→③ニュース記事データをテーブルビューに表示という手順で行う予定です。

その際に②の部分で以下のエラーメッセージが表示されます。

もし解決方法をご存知の方がいらっしゃったら教えていただけますと幸いです。何卒よろしくお願い致します。

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

Value of tuple type '(NSURLRequest?, NSHTTPURLResponse?, Result<AnyObject>)' (aka '(Optional<NSURLRequest>, Optional<NSHTTPURLResponse>, Result<AnyObject>)') has no member 'result'

###該当のソースコード

swift2

1import UIKit 2import Alamofire 3 4class ViewController: UIViewController { 5 6 var newsDataArray = NSArray() 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view, typically from a nib. 11//①ニュース情報の取得先 12 let requestUrl = "http://appcre.net/rss.php" 13 14//②webサーバーに対してHTTP通信のリクエストを出してデータを取得 15 Alamofire.request(.GET, requestUrl).responseJSON{ response in 16//以下のresponse.resultにエラーが出ます 17 switch response.result{ 18 case .Success(let json): 19 let jsonDic = json as! NSDictionary 20 let responseData = jsonDic["responseData"] as! NSDictionary 21 self.newsDataArray = responseData["results"] as! NSArray 22 print("\(self.newsDataArray)") 23 } 24 25 } 26 27 28//③ニュース記事データをテーブルビューに表示 29 } 30

###試したこと
ググってみたらresponse.resultのresultというメンバ変数?に原因があることは分かったのですが、では他に何を入れたら良いのか分かりませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報エラーメッセージ

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

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

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

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

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

guest

回答1

0

ベストアンサー

使っているAlamofireのバージョンが低いのが問題ではないでしょうか? Alamofireの3.x系列ではresponseJSONに渡すクロージャの引数は一つでResponseオブジェクトになっていますは、2.x系列以前では3つの引数が渡ることになっています。

解決策としては、Carthageを使っているならCartfileに、

github "Alamofire/Alamofire" ~> 3.4

と書いから依存関係をアップデートして、Alamofireの3.4(最新の安定バージョン)を使うようにする。

もしくはCocoaPodsを使っているなら、

pod 'Alamofire', '~> 3.4'

と書いてから依存関係をアップデートして、同様に最新版を使うようにするといいと思います。

もしくは、あまり推奨しませんが急場しのぎとしては、

swift

1import UIKit 2import Alamofire 3 4class ViewController: UIViewController { 5 6 var newsDataArray = NSArray() 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view, typically from a nib. 11//①ニュース情報の取得先 12 let requestUrl = "http://appcre.net/rss.php" 13 14//②webサーバーに対してHTTP通信のリクエストを出してデータを取得 15 Alamofire.request(.GET, requestUrl).responseJSON{ request, response, result in // 引数を追加 16 switch result { // response.resultではなくresultを使う 17 case .Success(let json): 18 let jsonDic = json as! NSDictionary 19 let responseData = jsonDic["responseData"] as! NSDictionary 20 self.newsDataArray = responseData["results"] as! NSArray 21 print("\(self.newsDataArray)") 22 } 23 24 } 25 26 27//③ニュース記事データをテーブルビューに表示 28 }

のように書き直せば動くのではないでしょうか。

投稿2016/08/31 18:01

MakeNowJust

総合スコア545

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

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

keeeeeek

2016/08/31 23:54

ご回答いただありがとうございます! CocoaPodsを使っているのですが、ご指摘いただいた通りバージョンが古い物でした。 最新のバージョンに更新したところ無事解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問