プライマリ関連型と型付きthrows
プロトコル存在型を制約し、Swift 6の型付きエラー伝播を学びます。
「プライマリ関連型と型付きthrows」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
プライマリ関連型
Swift 5.7では、プロトコルにプライマリ関連型を指定できるため、制約付き存在型を利用できます。
protocol Container<Element> {
associatedtype Element
var items: [Element] { get }
}
struct Bag<T>: Container { var items: [T] = [] }制約付き存在型
プライマリ関連型を使うと、any Containerと記述して存在型を絞り込めます。
func printItems(_ c: any Container<Int>) {
c.items.forEach { print($0) }
}
printItems(Bag(items: [1,2,3]))Collectionの制約付き存在型
Collectionなどの標準ライブラリのプロトコルも、プライマリ関連型をサポートするようになりました。
func first(_ c: any Collection<String>) -> String? {
c.first
}
print(first(["a","b","c"]) ?? "none")型付きthrowsの概要
Swift 6では型付きthrowsが導入され、関数がスローする可能性のある正確なエラー型を宣言できます。
enum NetworkError: Error { case timeout, notFound }
func fetch() throws(NetworkError) -> Data {
throw NetworkError.timeout
}型付きthrowsによる網羅的なcatch
エラー型がわかっているため、コンパイラーはすべてのケースが網羅的に処理されていることを検証できます。
do {
let _ = try fetch()
} catch .timeout {
print("Timed out")
} catch .notFound {
print("Not found")
}プロトコルでの型付きthrows
プロトコルの要件で型付きthrowsを指定できるため、準拠する型は正確なエラー型を提供できます。
protocol Fetchable {
associatedtype Failure: Error
func fetch() throws(Failure) -> Data
}型付きthrowsによる再スロー
rethrowsは型付きthrowsと連携し、外側の関数が内側のエラー型を伝播します。
func map<T, E: Error>(_ array: [T], transform: (T) throws(E) -> T) throws(E) -> [T] {
try array.map { try transform($0) }
}プライマリ関連型と型付きthrowsの組み合わせ
両方の機能を組み合わせて、正確で型安全なAPIを構築できます。
protocol Repository<Model> {
associatedtype Model
associatedtype Failure: Error
func fetchAll() throws(Failure) -> [Model]
}不透明な型付きthrows
throws(any Error)は型なしthrowsに相当し、柔軟な逃げ道を提供します。
func riskyOp() throws(any Error) {
// can throw any error
}移行:型なしthrowsから型付きthrowsへ
移行手順として、既存のthrowing関数に具体的なエラー型を段階的に注釈として追加します。
// Before:
func load() throws -> Data { ... }
// After:
func load() throws(NetworkError) -> Data { ... }型付きthrowsとasync
型付きthrowsはasyncと自然に組み合わせられます。async throws(E)は有効な構文です。
func fetchAsync() async throws(NetworkError) -> Data {
throw NetworkError.notFound
}理解度チェック
プロトコルにプライマリ関連型を指定すると、何が可能になりますか。
レッスンのまとめ
プライマリ関連型(Swift 5.7)により、any Collectionのような制約付き存在型を利用できます。型付きthrows(Swift 6)を使うと、網羅的なcatchブロックのために正確なエラー型を宣言できます。どちらの機能も型安全性とAPIの表現力を高めます。
AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「プライマリ関連型と型付きthrows」レッスンは無料ですか?
はい。「プライマリ関連型と型付きthrows」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「プライマリ関連型と型付きthrows」で何を学びますか?
プロトコル存在型を制約し、Swift 6の型付きエラー伝播を学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「プライマリ関連型と型付きthrows」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ジェネリック制約とwhere句
- someキーワードによる不透明型
- anyと型消去による存在型
- プライマリ関連型と型付きthrows