someキーワードによる不透明型
型の同一性を外部に公開せずに保つため、関数から不透明型を返します。
「someキーワードによる不透明型」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
不透明型が解決する問題
プロトコル型を any で返すと、型情報が失われます。some は実装を隠しながら型情報を保持します。
protocol Shape { var area: Double { get } }
struct Circle: Shape { var area: Double { .pi * 4 } }some Protocol の返却
返り値の型として some Shape を指定すると、どの型かは明かさずに「特定の Shape 型を返す」と呼び出し側に伝えられます。
func makeShape() -> some Shape {
return Circle()
}
let s = makeShape()
print(s.area)型の同一性が保持される
some 型には固定された基底型があるため、コンパイラーは Self を必要とする操作を許可できます。
func makeEquatableShape() -> some Shape & Equatable {
return Circle()
}
let a = makeEquatableShape()
let b = makeEquatableShape()
print(a == b) // works because types matchsome と any
some は不透明型(1つの固定された型)で、any は存在型(実行時に準拠する任意の型)です。
func withSome() -> some Shape { Circle() } // opaque
func withAny() -> any Shape { Circle() } // existentialSwiftUI の Body での some
SwiftUI は some View を使用することで、レイアウトの内部実装を公開せずに、各 View の body が一貫した1つの型を返せるようにしています。
struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}some による不透明パラメーター
Swift 5.7 以降では、パラメーター位置に some Protocol を記述できます。これはジェネリック制約の構文糖です。
func printArea(_ shape: some Shape) {
print(shape.area)
}
printArea(Circle())ジェネリックへの置き換え
不透明パラメーター some P は と同等です。コンパイラーは呼び出し箇所で T を推論します。
func doubled(_ value: some Numeric) -> some Numeric {
value * 2
}some に対する制約
ジェネリックと同じように、不透明型に対してプロトコルを組み合わせて指定できます。
func process(_ item: some Codable & Hashable) {
let hash = item.hashValue
print(hash)
}異なる型の返却
存在型とは異なり、不透明型では分岐ごとに異なる準拠型を返すことはできません。
// This would NOT compile:
// func shape(_ big: Bool) -> some Shape {
// big ? Circle() : Square() // ERROR: different types
// }プロトコルでの不透明型
関連型を持つプロトコルは、some を使うことで返り値の型としてより簡単に扱えるようになります。
protocol Buildable { associatedtype Output; func build() -> Output }
func build(_ b: some Buildable) -> some Any {
b.build()
}some を選ぶ場面
一貫した1つの型を返し、その同一性を保持したい場合は some を優先します。異種の要素を含むコレクションが必要な場合は any を使用します。
var shapes: [any Shape] = [Circle(), Circle()]
let single: some Shape = Circle()クイックチェック
some キーワードは、返り値の型について何を保証しますか?
レッスンの振り返り
some は具体的な型を隠しながら型の同一性を保持する、不透明な返り値の型を作成します。SwiftUI の some View が代表的な例です。単一の型を返す場合は some を、異種の要素を含むコレクションには any を使用します。
AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「someキーワードによる不透明型」レッスンは無料ですか?
はい。「someキーワードによる不透明型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「someキーワードによる不透明型」で何を学びますか?
型の同一性を外部に公開せずに保つため、関数から不透明型を返します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「someキーワードによる不透明型」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ジェネリック制約とwhere句
- someキーワードによる不透明型
- anyと型消去による存在型
- プライマリ関連型と型付きthrows