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

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

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

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

Swift

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

Q&A

解決済

1回答

875閲覧

クロージャの型宣言の省略は、『型推論』ですか?

kazuki_user

総合スコア147

iOS

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

Swift

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

0グッド

0クリップ

投稿2020/09/16 07:11

編集2020/09/16 07:39

## クロージャの型宣言の省略は、『型推論』ですか?

このサイトにて、

クロージャの型宣言は必ずしも指定する必要はありません。

とあったのですが、これは型推論でしょうか?


  • 型推論について調べると、以下のように出たので、

クロージャの型宣言の省略とは異なる気もするのですが...、ご返答頂きたいです。

型の指定をしなくても代入した値に応じて値の型を推論してくれる機能。

つまり、Swiftは変数の宣言時に型の指定を省略できる。

## なぜ「異なる」気がしたのか

代入した値に応じて値の型を推論」とありますが、
代入する側であるクロージャの型を省略したら、"代入した値"の情報が削がれるので、

その値に応じて推論する事なんてできるのかな?と思った感じです。

// 型を指定 let closure_4: ( (Int, Int) -> Void) = { (num1: Int, num2: Int) -> Void in print(num1 + num2) } // 型推論? let closure_5: ( (Int, Int) -> Void) = { (num1, num2) -> Void in print(num1 + num2) }

まだ型推論について学び始めたばかりですので、
認識の誤りがあれば教えていただきたいです。

質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????

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

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

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

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

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

fuzzball

2020/09/16 07:22

なぜ「異なる気」がしたのか教えて下さい。
fuzzball

2020/09/16 07:46

その記事の、 >> 1. var cl : ((Int, Int) -> Void) >> クロージャの型宣言は必ずしも指定する必要はありません。 の部分を読んで、「クロージャの型宣言」というのは「: ((Int, Int) -> Void)」の部分のことだと私は思いました。
fuzzball

2020/09/16 07:47

質問に追記されたコードでいうと、 let closure_4 = { (num1: Int, num2: Int) -> Void in print(num1 + num2) } ということです。
guest

回答1

0

ベストアンサー

文脈からして、

これを

swift

1let cl: ( (Int, Int) -> Void) = { (num1: Int, num2: Int) -> Void in print(num1 + num2) }

こう省略しても

swift

1let cl = { (num1: Int, num2: Int) -> Void in print(num1 + num2) }

clに代入しようとしている物が(Int, Int) -> Void型であることが明らかなので型推論が働くよ
ってことが言いたいんじゃないかなと

もちろん、さらに引数の型まで省略したら型が確定しないのでエラーになります。

swift

1let cl = { (num1, num2) -> Void in print(num1 + num2) }

投稿2020/09/16 07:49

ozwk

総合スコア13512

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問