0Pricing
Swift Academy · レッスン

クロージャの型推論

クロージャにおけるパラメータと戻り値の推論を理解します。

「クロージャの型推論」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

クロージャの型推論

多くのコンテキストでは、クロージャの使われ方からパラメータと戻り値の両方の型を推論できます。

let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled)

パラメータ型の推論

map にクロージャを渡すと、要素の型から $0 が何であるかをSwiftが判断するため、パラメータの型を省略できます。

let names = ["ada", "bob"]
let upper = names.map { $0.uppercased() }
print(upper)

戻り値の型の推論

クロージャの本体によって戻り値の型が決まります。Bool を返すと、そのクロージャは述語になります。

let nums = [1, 2, 3, 4, 5]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)

省略形の引数名

$0、$1 などは、型が推論される場合に、位置によってクロージャの引数を参照します。

let sums = zip([1, 2, 3], [10, 20, 30]).map { $0 + $1 }
print(Array(sums))

必要に応じた明示的なパラメータ

読みやすさが向上する場合は、パラメータに名前を付けて型を注釈することもできます。

let nums = [3, 1, 2]
let sorted = nums.sorted { (a: Int, b: Int) -> Bool in
    return a < b
}
print(sorted)

コンテキストからの推論

型付きの変数にクロージャを代入すると、変数の型からクロージャのシグネチャが決まります。

let add: (Int, Int) -> Int = { a, b in a + b }
print(add(2, 3))

トレーリングクロージャ

トレーリングクロージャ構文を使うと、呼び出し箇所を読みやすくしながら型推論も機能させられます。

let result = [5, 3, 8, 1].sorted { $0 > $1 }
print(result)

reduceでの推論

reduce では、初期値とシーケンスからアキュムレータと要素の型が推論されます。

let total = [1, 2, 3, 4].reduce(0) { acc, x in acc + x }
print(total)

クロージャからの戻り値

単一式のクロージャでは return キーワードを省略できます。式の値が返され、その型が推論されます。

let lengths = ["hi", "hello", "hey"].map { $0.count }
print(lengths)

型注釈付きクロージャ変数

すぐに呼び出さずにクロージャを保存する場合は、Swiftが本体を推論できるようにクロージャの型を注釈してください。

let transform: (String) -> Int = { $0.count }
print(transform("swift"))

型注釈が必要な場合

周囲のコンテキストから型情報が得られない場合、Swiftはクロージャのパラメータを推論できないため、型注釈が必要です。

let isPositive: (Int) -> Bool = { n in n > 0 }
print(isPositive(5), isPositive(-3))

確認テスト

クロージャの型推論をテストしてください。

まとめ

クロージャは、map、filter、型付き変数などのコンテキストからパラメータと戻り値の型を推論します。型が推論される場合は $0/$1 の省略形を使い、コンテキストがない場合は明示的に型注釈を付けてください。

let f: (Int) -> Int = { $0 + 1 }
let xs = [1, 2, 3].map { $0 * 10 }
print(f(9), xs)

よくある質問

「クロージャの型推論」レッスンは無料ですか?

はい。「クロージャの型推論」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「クロージャの型推論」で何を学びますか?

クロージャにおけるパラメータと戻り値の推論を理解します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「クロージャの型推論」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 型推論の仕組み
  2. 明示的なアノテーションを追加するタイミング
  3. リテラルの型推論
  4. クロージャの型推論
← Swift Academyに戻る