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

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

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

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Swift

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

Q&A

解決済

2回答

325閲覧

APIとの通信ができない

hodoru3sei

総合スコア284

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Swift

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

0グッド

0クリップ

投稿2018/10/13 10:49

最終目標として、ライブラリを使わずにJsonのParseをおこないたいとおもっています。
HTTPリクエスト概要このサイトを参考にAPIに非同期でアクセスするコードを模写しました。

現状のコードはこのようになっています。

Swift

1 override func viewDidLoad() { 2 super.viewDidLoad() 3 let url = URL(string: "https://api.syosetu.com/novelapi/api/")! 4 let request = URLRequest(url: url) 5 let task = URLSession.shared.dataTask(with: request) { (data, response, error) in 6 guard let data = data else{return} 7 do{ 8 let object = try JSONSerialization.jsonObject(with: data, options: []) 9 print(object) 10 } catch let e { 11 print(e) 12 } 13 } 14 print("test") 15 }

エラーなくビルドは通るのですが、taskの中を通っていないようでprint出力がされません。
URLをブラウザで検索するとJson形式の文字列が表示されたので、URLが街が照っているということはなさそうです、またhttpsなのでATSも問題にならないかと思いました。

何が問題なのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

task.resume() を呼んでいない。

投稿2018/10/13 16:26

daisuke7

総合スコア1563

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

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

hodoru3sei

2018/10/13 22:15

クロージャの中は通るようになったのですが、エラーが出てしまいました。通信の部分で失敗してしまっているのでしょうか Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
hodoru3sei

2018/10/14 02:11

OpenWetherMapのAPIで試してみてら成功しました!ありがとうございます
hodoru3sei

2018/10/14 02:56

今更なんですが、task.resume()って何をする処理何でしょうか? resumeはtaskの中の処理を実行するトリガみたいなものなんでしょうか?
daisuke7

2018/10/14 03:16

dataTask https://developer.apple.com/documentation/foundation/urlsession/1407613-datatask > After you create the task, you must start it by calling its resume() method. resume https://developer.apple.com/documentation/foundation/urlsessiontask/1411121-resume > Newly-initialized tasks begin in a suspended state, so you need to call this method to start the task. つまりタスクは最初サスペンド状態なので、resumeしないと動かないってことです。 まずはリファレンス読みましょう。
hodoru3sei

2018/10/14 03:23

ありがとうございます
guest

0

たぶんですけど、viewDidLoadを抜けるときにtaskが消えてしまっています。
classの変数としてvar taskを定義してみてください。

投稿2018/10/13 12:42

kosanai

総合スコア471

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

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

hodoru3sei

2018/10/13 22:17

メンバ変数にしてみたのですが、エラーでchatchの部分のeがprintされていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問