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

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

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

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

2回答

4245閲覧

swift3でのサイトのhtml取得

Kyoya1123

総合スコア54

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2016/10/16 13:56

サイトのhtmlを取得しようと
このサイトを目標にこのサイトを見たりしてやってみているのですがどうしてもうまくいきません。
URLSession.shared...の行でエラーが出ます。

エラー
Ambiguous reference to member 'dataTask(with:completionHandler:)
Found this candidate (Foundation.URLSession)
Found this candidate (Foundation.URLSession)

コード

swift

1 let url = NSURL(string: "http://www.weather-forecast.com/locations/Tokyo-1/forecasts/latest") 2 let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in 3 if error != nil { 4 5 print(error!.localizedDescription) 6 7 } else { 8 9 do { 10 11 12 } catch { 13 14 print("error") 15 16 } 17 18 19 } 20 21 }) 22 task.resume()

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

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

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

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

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

guest

回答2

0

解決済みなんですが、一応。
dataTask()はURLでのオーバーロードが存在するので、提示コードでも大丈夫なはずです。

swift

1open func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask 2open func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask

提示コード上のurlを直打ちするとjsonが返ってこないのでそれが不具合に関係してるような...
ためしにjsonを返すurlで以下のコードを実行すると正常に動作します。

swift

1class ViewController: UIViewController { 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 // 質問のURLと変更 7 let url = URL(string: "http://weather.livedoor.com/forecast/webservice/json/v1?city=130010")! 8 9 let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in 10 if error != nil { 11 print(error!.localizedDescription) 12 } else { 13 do { 14 if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] 15 { 16 print(json) 17 } 18 } catch { 19 } 20 } 21 }) 22 task.resume() 23 } 24}

投稿2016/10/16 15:11

編集2016/10/16 15:13
fromageblanc

総合スコア2724

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

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

0

ベストアンサー

引数の型が違うようですね、以下の様にすることで取得できると思います、試してみてください。

swift

1open func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask

URLURLRequest

swift

1import UIKit 2 3class ViewController: UIViewController, URLSessionDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 let url: URL = URL(string: "http://www.weather-forecast.com/locations/Tokyo-1/forecasts/latest")! 9 let task = URLSession.shared.dataTask(with: URLRequest(url: url), completionHandler: { (data, response, error) in 10 if error != nil { 11 12 print(error!.localizedDescription) 13 } else { 14 15 print(NSString(data: data!, encoding: String.Encoding.utf8.rawValue)) 16 } 17 18 }) 19 task.resume() 20 } 21}

投稿2016/10/16 14:10

編集2016/10/16 14:18
_Kentarou

総合スコア8490

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問