型キャスト:is、as?、as!、as
Swiftのキャスト演算子で型を安全に確認・変換します。
「型キャスト:is、as?、as!、as」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
型キャストとは
型キャストを使うと、インスタンスが階層内の別のクラスかどうかを確認したり、別のクラスに変換したりできます。
class Animal { var name: String = "Animal" }
class Dog: Animal { func bark() { print("Woof") } }
let a: Animal = Dog()
print(a.name)is演算子
特定のサブクラスのインスタンスかどうかを確認するには、isを使用します。
let a: Animal = Dog()
if a is Dog {
print("It's a dog")
}as?によるダウンキャスト
as?はダウンキャストを試み、Optionalを返します。失敗した場合、結果はnilになります。
let a: Animal = Dog()
if let dog = a as? Dog {
dog.bark()
} else {
print("Not a dog")
}as!によるダウンキャスト
as!はサブタイプへの強制キャストを行います。型が確実に一致するとわかっている場合にのみ使用してください。一致しない場合はクラッシュします。
let a: Animal = Dog()
let dog = a as! Dog
dog.bark()asによるアップキャスト
サブクラスからスーパークラスへのアップキャストは必ず成功し、asを使用します。
let dog = Dog()
let animal = dog as Animal
print(animal.name)コレクションでの型キャスト
[Any]型の異なる型を含む配列で、特定の振る舞いを利用するにはキャストが必要です。
let items: [Any] = [1, "hello", Dog()]
for item in items {
if let d = item as? Dog { d.bark() }
if let s = item as? String { print(s) }
}AnyObjectを使った型キャスト
AnyObjectは、任意のクラスインスタンスを表します。具体的な型を取り出すにはas?を使用します。
let objs: [AnyObject] = [Dog(), Dog()]
for obj in objs {
if let d = obj as? Dog { d.bark() }
}プロトコル型のキャスト
同じ演算子を使って、プロトコル型と具象型の間でキャストできます。
protocol Runnable { func run() }
class Cat: Animal, Runnable { func run() { print("Cat runs") } }
let r: Runnable = Cat()
if let cat = r as? Cat { print(cat.name) }switchでのisによるパターンマッチング
Swiftのswitch文では、isパターンを使って型に基づくマッチングを行えます。
let value: Any = 42
switch value {
case is Int: print("Integer")
case is String: print("String")
default: print("Other")
}switchパターンでのas?
let x as Typeとswitchを組み合わせると、型の確認と値の束縛を1つの手順で行えます。
let value: Any = "Swift"
switch value {
case let s as String: print("String: \(s)")
case let i as Int: print("Int: \(i)")
default: break
}安全なキャストのベストプラクティス
本番コードでの実行時クラッシュを避けるため、常にas!よりas?を優先してください。
func describe(_ obj: AnyObject) {
if let dog = obj as? Dog { dog.bark(); return }
print("Unknown type")
}理解度チェック
ダウンキャスト時にOptionalを返す演算子はどれですか?
レッスンのまとめ
Swiftの型キャストでは、isで型を確認し、as?で安全にOptionalへダウンキャストし、as!で強制的にダウンキャストし、asでアップキャストします。本番コードではas?を優先してください。
AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「型キャスト:is、as?、as!、as」レッスンは無料ですか?
はい。「型キャスト:is、as?、as!、as」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「型キャスト:is、as?、as!、as」で何を学びますか?
Swiftのキャスト演算子で型を安全に確認・変換します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「型キャスト:is、as?、as!、as」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- クラス継承とsuperキーワード
- override、finalとサブクラス化の防止
- 型キャスト:is、as?、as!、as
- デイニシャライザとメモリのライフサイクル