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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Swift

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

Q&A

0回答

516閲覧

swift jsonの書き換えが実行されない原因を教えてください

zakkiblog

総合スコア3

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Swift

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

0グッド

0クリップ

投稿2021/03/02 21:25

編集2022/01/12 10:55

swiftでのjsonの利用についてです。

クラス内のメンバ変数titleが、getJSON関数の中で書き換えることが出来ているつもりなのですが、結果を表示すると書き換えられていません。
どこに誤りがあるのかが分からない状態なので、指摘して頂けると幸いです。

以下、コード内下部で「//ここでtitleが書き変わらない」と表示してあるところが直したい箇所です。
どうぞよろしくお願いします。

import UIKit import PlaygroundSupport PlaygroundPage.current.needsIndefiniteExecution = true struct Results: Codable{ let status: String let items: [Items] } struct Items: Codable{ let title: String let link: String let pubDate: String } class Client { var title:String = "default" func someTask(){ let url = URL(string: "https://api.rss2json.com/v1/api.json?rss_url=http%3A%2F%2Fnogizaka.readers.jp%2Frss1s.rss")! let task = URLSession.shared.dataTask(with: url) { data, response, error in if let jsonData = data {self.getJSON(jsonData)}} task.resume() } func getJSON(_ data: Data) { do { let results = try JSONDecoder().decode(Results.self, from: data) let result_items = results.items let res_title:String = result_items[0].title // ### **ここでtitleが書き変わらない** self.title = res_title } catch { print("parse error!") } } } let client = Client() client.someTask() print(client.title)

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

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

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

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

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

hoshi-takanori

2021/03/02 21:58 編集

非同期処理だからです。 sleep(1) の後に print(client.title) したら変わるかも。
tomato879241

2021/03/02 23:17

hoshi-takanoriが言っていると通り、URLSession.shared.dataTask(with: )ではいつデータが届くかわからないので、completion blockを使って、データが届いてからgetJSONの処理に繋げる必要があります。
errolizer

2021/03/02 23:42

描画を行えるのはUIスレッドだけです。 他のスレッドで描画を行っても画面の表示は変わりません。実行時にXcodeで青字の警告が出ていませんか?
zakkiblog

2021/03/03 02:10

ありがとうございます! 皆様のおかげで何とかなりそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問