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

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

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

Swift Playgroundは、Swiftをインタラクティブに習得できるiPad向けのアプリケーション。コーディングの知識は一切必要なく、Swift Playgrounds上でプログラミングしたコードによりドローン・ロボットを自在に動かすことが可能です。

JSON

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

Swift

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

1760閲覧

Swift5 変数の値が変わったら画面遷移させたい

champon

総合スコア1

Swift Playground

Swift Playgroundは、Swiftをインタラクティブに習得できるiPad向けのアプリケーション。コーディングの知識は一切必要なく、Swift Playgrounds上でプログラミングしたコードによりドローン・ロボットを自在に動かすことが可能です。

JSON

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

Swift

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2020/07/24 11:40

apiでデータを取得するアプリを作っています。データを配列に格納するのですが、データを格納し終わったら画面を遷移させたいです。
プロパティ監視(willSet)を使ってみましたが画面遷移するメソッドが呼び出せません。それとも他に良いメソッドがあるのでしょうか?アドバイスをお願いします。

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

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

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

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

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

TsukubaDepot

2020/07/24 12:06

関連するコードを提示していただくことは可能でしょうか。 また、プロパティオブザーバを使う場合、構造体とクラスでは挙動が異なっているようなので、APIで取得するデータに対応したデータ型も提示していただければと思います。
champon

2020/07/24 14:59

使用しているapiはこれです。SwiftJsonを使っています。 https://www.stopcovid19.jp/data/covid19japan-all.json コードはこんな感じです AF.request("https://www.stopcovid19.jp/data/covid19japan-all.json").responseJSON { response in switch response.result { case .success(let data): let jsonObject = JSON(data) let date = jsonObject[jsonObject.count - 1]["lastUpdate"].stringValue let patients = jsonObject[jsonObject.count - 1]["area"][0]["npatients"].intValue let deaths = jsonObject[jsonObject.count - 1]["area"][0]["ndeaths"].intValue japanPatients = patients japanDeaths = deaths case .failure(let error): print(error.localizedDescription) } }
TsukubaDepot

2020/07/24 22:12

「プロパティ監視(willSet)を使ってみましたが画面遷移するメソッドが呼び出せません。」ということですが、それに関連するコードの記載が無いようです。 遷移させようとした部分のコードも拝見できませんでしょうか。
TsukubaDepot

2020/07/24 22:13

あと、コードはご質問本文に追記していただいた方が、他の方もすぐに分かって良いかと思います。
champon

2020/07/25 03:48

ご指摘ありがとうございます。 サンプルで作ったコードはこれです。 class Sample { var a:Int = 0{ willSet{ //ここで画面遷移するメソッドを呼び出したい } } }
TsukubaDepot

2020/07/25 04:42

上記のコードと1回目にご提示いただいたコードは直接結びつかないのですが、どのような関係なのでしょうか。 たとえば、Alamofire(AF) を呼び出した後のコードで様々な値を代入する部分の変数がプロパティオブザーバになっているのであれば理解できるのですが、上記で定義した a という変数は、プロパティオブザーバは設定されているものの、AFの呼び出し内では一回も使われていないようです。
champon

2020/07/25 05:12

質問の仕方が下手で申し訳ありません。 willSetのコードはサンプルでかいただけなのでまだ関連付けてはいません。 willSetを使ってjapanPatientsにpatientsの値が代入されたときに画面遷移のメソッドを呼び出すにはどうすればいいですか?
TsukubaDepot

2020/07/25 05:14

そうなると、プロパティオブザーバのサンプルは書かれたということですが、そのサンプルそのものの挙動については確認されましたでしょうか。 まずはシンプルなサンプルを作り、挙動を確認してからの話になるかと思います(プロパティオブザーバの挙動はクラスや構造体でも異なってくるようなので)。 プロパティオブザーバそのものがよく理解できていない、ということであれば、それに応じた回答を準備したいと思います。
champon

2020/07/25 11:32

プロパティオブザーバを使ったのは今回が初めてなのでよく理解できていません。よろしくお願いします。
guest

回答1

0

プロパティオブザーバの簡単な例はざっとこのような感じになります。
Playground で実行可能です。

Swift

1import UIKit 2 3class Sample { 4 var a:Int = 0 { 5 // 値が代入される前に実行される 6 willSet{ 7 // 実行したい処理を実行するだけ 8 print("willSet: 以前の値は (a), 新しい値は (newValue)") 9 } 10 // 値が代入されたあとに実行される 11 didSet { 12 print("didSet: 以前の値は (oldValue), 新しい値は (a)") 13 } 14 } 15} 16 17var s = Sample() 18// a に値を入れるとその前後でプロパティオブザーバが作用する 19s.a = 10 20// 表示は以下の通り: 21// willSet: 以前の値は 0, 新しい値は 10 22// didSet: 以前の値は 0, 新しい値は 10

willSet, didSet 両方記述する必要はなく、必要な節だけ記述することも可能です。

ここでは print() を使って値を表示していますが、reloadData()などを実行することも可能です。ただし、その場合はdidSetの方に記述しなければ思ったようなタイミングで更新させることはできないかもしれません。

投稿2020/07/25 12:13

TsukubaDepot

総合スコア5086

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

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

champon

2020/07/25 22:07

回答ありがとうございます。 performSegueを呼び出すことは可能ですか?
TsukubaDepot

2020/07/25 23:27

まずは試してみてはいかがでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問