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

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

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

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift

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

Q&A

解決済

1回答

2668閲覧

Swift Alamofire2.0から3.0においての、コードの修正方法を知りたい

hisui123

総合スコア21

iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift

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

0グッド

0クリップ

投稿2016/08/15 01:08

編集2016/08/15 01:15

###前提・実現したいこと

RSSリーダーアプリを作成しています。
こちらを参考に進めていました。
http://x1.inkenkun.com/archives/909

あらかた、ライブラリ等を入れて、
ビルドしましたが、エラーが出ました。

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

.responseJSON { (request, response, data, error) in のコードについて、 以下のエラーメッセージ contextual closure type 'Response<AnyObject,NSError> -> Void' expects 1 argument,but 4 were used in closure body

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

swift

1 2 3 4 5 6import UIKit 7import Alamofire 8import SwiftyJSON 9import HTMLReader 10 11class parseFeed{ 12 13 /* 14 RSSのJSONをパースする 15 */ 16 func parse (url: String, completion: (([JSON]?, NSError?) -> Void)){ 17 18 var url = NSURL(string: url) 19 20 Alamofire.request(.GET, url!, parameters: nil, encoding: .JSON) 21 22 .responseJSON { (request, response, data, error) in 23 24 let json = JSON(data!) 25 let entries = json["responseData"]["feed"]["entries"].array 26 27 completion(entries, error) 28 } 29 30 31 32 33 34 } 35 36 37 /* 38 URL先の文章と画像を取得 39 */ 40 func getContents (url: String, completion: ((AnyObject, NSError?) -> Void)){ 41 42 var url = NSURL(string: url) 43 var ret : Dictionary<String, String!> = [:] 44 45 Alamofire.request(.GET, url!, parameters: nil) 46 47 .responseString { (request, response, data, error) in 48 49 var content = "" 50 let html = HTMLDocument(string: data) 51 52 if let ogTags = html.nodesMatchingSelector("meta[property=\"og:description\"]") { 53 for tag in ogTags { 54 content = (tag.attributes?["content"] as? String)! 55 } 56 } 57 58 var image = "" 59 if let imgTags = html.nodesMatchingSelector("img") { 60 for img in imgTags { 61 if(img.attributes?["data-src"] != nil){ 62 image = (img.attributes?["data-src"] as? String)! 63 } 64 } 65 } 66 67 ret = [ "content": content , "image" : image ] 68 completion(ret, error) 69 } 70 } 71 72}

###試したこと
ネットで、
Alamofire2.0から3.0に変更となり、
記述方法が変わった事は分かったのですが、
let entries = json["responseData"]["feed"]["entries"].array

等の部分をどう変えたら良いのか分からず、
ここで質問をする事にしましした。

いっそ、
Alamofire3.0から、2.0にダウングレードした方がいいのかな
等考えています。

ですが、ある程度出来たので、
Alamofire3.0に沿っての修正を行いたいです。

よろしくお願いします。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

Alamofireの2.0 → 3.0の変更は以下を参考にしてみてください。

[Swift] Alamofire 3.0を使用してJSONデータを取得(2.0と書き方が変わってます)

let entries = json["responseData"]["feed"]["entries"].array

心配されている上記の部分はSwiftyJSONの部分でAlamofireのところを適切に変更すれば問題無いと思います。

サンプルのGithubのコードからエラーの出ていた部分を以下の様に変更しました。
※実際に実行まではしていないので、変更して確認してみてください。

修正前

swift

1Alamofire.request(.GET, url!, parameters: nil, encoding: .JSON) 2 3 .responseJSON { (request, response, data, error) in 4 5 let json = JSON(data!) 6 let entries = json["responseData"]["feed"]["entries"].array 7 8 completion(entries, error) 9}

修正後

swift

1Alamofire.request(.GET, url!, parameters: nil, encoding: .JSON) 2 3 .responseJSON { (response) in 4 5 let json = JSON(response.data!) 6 let entries = json["responseData"]["feed"]["entries"].array 7 8 completion(entries, response.result.error) 9}

投稿2016/08/15 01:39

編集2016/08/15 01:41
_Kentarou

総合スコア8490

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

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

hisui123

2016/08/15 01:53

ありがとうございます! 修正されたコードを試した所、無事にエラーが消えました。 何時間も探しただけに、感動です。 ただ、 後1箇所、 let html = HTMLDocument(string: data) のコードについて、 Use of unresolved identifier 'data' とのエラーメッセージが出ました。 これについても、もし分かれば、よろしくお願い致します(>_<) また分からなければ、改めて質問に上げたいです。 ありがとうございます。
_Kentarou

2016/08/15 02:08

dataがStringではなくNSStringなので以下の様にするといけました。 let html = HTMLDocument(string: String(response.data))
hisui123

2016/08/15 02:11

エラー消えました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問