Swift Academy · レッスン

型キャスト:is、as?、as!、as

Swiftのキャスト演算子で型を安全に確認・変換します。

レッスン 3/413 ステップ

「型キャスト: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フィードバックを取得できます。ローカル設定は不要です。

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

  1. クラス継承とsuperキーワード
  2. override、finalとサブクラス化の防止
  3. 型キャスト:is、as?、as!、as
  4. デイニシャライザとメモリのライフサイクル
← Swift Academyに戻る