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

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

ただいまの
回答率

90.50%

  • Swift

    7254questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 135

 前提・実現したいこと

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

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

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

 該当のソースコード

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        var qc = QueryCondition()
        qc.query = "ハンバーガー"

        yls = YahooLocalSearch(condition: qc)

 試したこと

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

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

// QueryConditionクラス
class QueryCondition {

    // プロパティ
    var query = ""
}

// YahooLocalSearchクラス
class YahooLocalSearch {

    // プロパティ
    var condition: QueryCondition

    // 初期化(引数の型はQueryCondition)
    init(condition: QueryCondition) {
        self.condition = condition
    }
}

// QueryConditionクラスを生成
var qc = QueryCondition()
// プロパティに値を設定
qc.query = "ハンバーガー"

// YahooLocalSearchクラスの初期化時の引数にQueryConditionクラスを渡す
let yls = YahooLocalSearch(condition: qc)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/13 18:47

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

    参考にさせていただきます

    キャンセル

checkベストアンサー

+2

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

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

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

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

public class YahooLocalSearch {

    var condition: QueryCondition

    // イニシャライザの定義(引数名: 型)
    // (訳) conditionという引数名(ラベル)に対してQueryCondition型の引数を渡してください
    public init(condition: QueryCondition) {
        self.condition = condition
    }
}


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

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

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


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

var qc = QueryCondition()


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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/13 18:46

    わかりやすく詳しい解説していただきありがとうございます。

    また、プログラミングについてのアドバイスもとてもためになりました。
    ありがとうございます。

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    7254questions

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