🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

616閲覧

引数を複数取るメソッド

aae_11

総合スコア178

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2019/11/21 03:20

編集2019/11/21 03:21

swiftのメソッドにつきまして、お聞きしたいことがございます。

optional func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

swiftを学習していた際、上記のようなメソッドを多々見かけるのですが、 heightForRowAt indexPath:こちらの部分の引数が複数ある場合の挙動がいまいち良く分かりません。
こちらはUITableViewDelegateのメソッドになるのですが、内部的には、単純にheightForRowAtindexPathの2つの引数が割り当てられていると考えて良いのでしょうか...?
いまいちQiitaの記事を見たのですが、良く分からなかった為、ご質問させて頂きました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

外部引数名と内部引数名ですね。

外から呼ぶときは外部引数名を使い、関数内では内部引数名で変数を扱う感じです。

例:

swift

1 // 呼び出すときは外部期数名を使う 2 test(aaa: 1234) 3 4 func test(aaa bbb: Int) { 5 // print(aaa) aaaは中からは使えない! 6 print(bbb) // 関数ないでは変数bbbとして扱う 7 }

で、なぜ外部引数名と内部引数名と変える機構があるかというと、おそらくですが、
Swiftの関数の命名方法は、わりと英文を読むようなものになっていると思います。

例えば質問欄で出たtableView(..., heightForRowAt: ...)
も「指定の行の高さを取得」しているように読めます。

一方で、この関数を実装している側からすると、

swift

1tableView(.... heightForRowAt: IndexPath) { 2 heightForRowAt 3}

このようにheightForRowAtの名称のまま引数を取り扱うのは、やや意味がわかりにくいです。

一度let indexPath = heightForRowAtなどと代入しても良いですが、同等の機構をswiftが用意してくれていると思えばよいかと思います。

投稿2019/11/21 05:06

編集2019/11/21 05:15
takabosoft

総合スコア8356

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

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

aae_11

2019/11/21 08:52

ご回答ありがとうございます。 大変分かりやすくご説明頂き、助かります。 今回のケースですと、関数内では、「hightForRowAt」の中身を分かりやすく、「indexPath」として使用出来るといった意味だったのですね... しかし、「heightForRowAt indexPath: IndexPath)」このような形ですと、型名と引数名が同じになってしまい、いささか分かりにくくも感じてしまいますね...
guest

0

https://docs.swift.org/swift-book/LanguageGuide/Functions.html#ID166

上記をご覧ください。
関数には、引数ラベルとパラメータ名を付与することができます。
引数ラベルは、関数を呼び出すときに使用されます。
パラメータ名は、関数内で利用します。

デフォルト(一つしかない場合)では、パラメーターはパラメーター名を引数ラベルとして使用します。

ですので、heightForRowAt indexPath:と指定された場合、以下のようになります。
heightForRowAt:引数ラベル
indexPath:パラメータ名
(関数の)内部的にはindexPathを利用します。
当該関数を呼び出す場合にheightForRowAtを利用し(て呼び出し)ますが、delegateメソッドなので表に見えていないです。

投稿2019/11/21 05:04

t_obara

総合スコア5488

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

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

aae_11

2019/11/21 08:57

ご回答ありがとうございます。 >関数には、引数ラベルとパラメータ名を付与することができます。 このような仕組みが備わっていたのですね...勉強になりました。 貼って頂いたリンク先は、公式のドキュメントですかね...? これ以降は公式ドキュメントも参考にしつつ、勉強を進めて参りたいと思います...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問