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

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

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

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

Q&A

解決済

2回答

961閲覧

APIからもらう値?の扱い方がわかりません

nikorasunakeizi

総合スコア27

Swift

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

0グッド

0クリップ

投稿2018/05/11 11:19

前提・実現したいこと

現在swiftの参考書でサンプルアプリを作成しています。
ここではYahooローカルサーチAPIというものを使用しています。

以下のコードの
yls = YahooLocalSearch(condition: qc)
の(condition: qc)の部分がよくわかりません

conditionとqcの間にある:が何かわかっていないことが原因だと思うのでそこを中心に解説していただけたらありがたいです

該当のソースコード

swift

1override func viewWillAppear(_ animated: Bool) { 2 super.viewWillAppear(animated) 3 var qc = QueryCondition() 4 qc.query = "ハンバーガー" 5 6 yls = YahooLocalSearch(condition: qc)

試したこと

:の前に引数、後に型という認識だったのですがqcは変数であることが2行上のコードからわかり、混乱しております

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

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

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

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

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

guest

回答2

0

想像ですが内部が以下のような形になっていたら、質問のコードも納得できるのではないでしょうか。

swift

1 2 3// QueryConditionクラス 4class QueryCondition { 5 6 // プロパティ 7 var query = "" 8} 9 10// YahooLocalSearchクラス 11class YahooLocalSearch { 12 13 // プロパティ 14 var condition: QueryCondition 15 16 // 初期化(引数の型はQueryCondition) 17 init(condition: QueryCondition) { 18 self.condition = condition 19 } 20} 21 22// QueryConditionクラスを生成 23var qc = QueryCondition() 24// プロパティに値を設定 25qc.query = "ハンバーガー" 26 27// YahooLocalSearchクラスの初期化時の引数にQueryConditionクラスを渡す 28let yls = YahooLocalSearch(condition: qc)

投稿2018/05/11 11:38

_Kentarou

総合スコア8490

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

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

nikorasunakeizi

2018/05/13 09:47

それぞれのコードに説明文を書いていただきwりがとうございます。 参考にさせていただきます
guest

0

ベストアンサー

:の前に引数、後に型という認識

イニシャライザの定義に関してはその認識で概ね合っていますが、イニシャライザの実行に関してはその認識だと間違ってます。イニシャライザの定義方法とイニシャライザの実行方法は違うので、まずその認識を改めてください。
※イニシャライザが何なのかわからない場合は、参考書にも記載されているはずなのでご自身で調べてください。以降は質問に対する直接的な回答しかしません。
※本質問ではイニシャライザについてなので、そこにフォーカスしますが、関数についても同様の考え方です。

(condition: qc)の部分がよくわかりません

YahooLocalSearchクラスの記載がないので若干参考書とは異なるかもしれませんが、YahooLocalSearchクラスは以下のようになっていると思います。

Swift

1public class YahooLocalSearch { 2 3 var condition: QueryCondition 4 5 // イニシャライザの定義(引数名: 型) 6 // (訳) conditionという引数名(ラベル)に対してQueryCondition型の引数を渡してください 7 public init(condition: QueryCondition) { 8 self.condition = condition 9 } 10}

冒頭で「イニシャライザの定義に関してはその認識で概ね合っています」と言いましたが、上記(参考書)の通り、質問者さんの言う「:の前に引数(厳密には引数名です)、後に型」になっていますよね?

で、問題はここからです。イニシャライザ(関数)の実行について見ていきましょう。

Swift

1// イニシャライザの実行(引数名: 引数) = クラスの初期化 2// (訳) 指示通りconditionという引数名(ラベル)に対してQueryCondition型の引数を渡します 3YahooLocalSearch(condition: qc)

qcは以下からQueryCondition型であることはわかりますよね?

Swift

1var qc = QueryCondition()

上記イニシャライザの実行では指示(定義)通りにQueryCondition型のqcを引数として渡しているわけです。

以上の通り、イニシャライザの実行については、イニシャライザの定義と違って「:の前に引数名、後に引数」となります。:の前にくる引数名は同じですが、後に来る部分が違うことがわかると思います。

ここからは余談です。
参考書で学習されているとのことですが、上記のような基礎をスキップしていきなり外部APIを使用したアプリの解説をしている参考書はないと思います。今回のイニシャライザのほか、変数や関数の定義方法および実行方法も最初のほうで解説されているはずです。
せっかく参考書をお持ちなので、はやる気持ちは良くわかりますが、参考書を何度も読み返してください。
teratailでは参考書なみに丁寧な解説はされない(できない)ので、参考書を見てどうしてもわからない場合にteratailを利用すれば良いでしょう。

投稿2018/05/11 16:29

xenbeat

総合スコア4258

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

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

nikorasunakeizi

2018/05/13 09:46

わかりやすく詳しい解説していただきありがとうございます。 また、プログラミングについてのアドバイスもとてもためになりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問