teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2019/12/03 02:05

投稿

MasakiHori
MasakiHori

スコア3391

answer CHANGED
@@ -1,1 +1,17 @@
1
- コンパイラが認識する型が変わるだけといえば分かりますか?
1
+ コンパイラが認識する型が変わるだけといえば分かりますか?
2
+
3
+ ----
4
+ 追記
5
+ (注意:以下の説明で用いているラベルという単語は説明のために使っているものでSwiftで一般的に用いられる用語ではありません)
6
+
7
+ コンパイラはコンパイル時に各変数/定数などに型というラベルを張り付けます。
8
+ コンパイラはそのラベルを頼りに使用可能なメソッドやプロパティを決定します。
9
+
10
+ ```swift
11
+ let a = 0
12
+ let b = a as Any
13
+ ```
14
+ としたとき実体としてのbはIntのままですが、コンパイラが認識するラベルとしての型はAnyになります。
15
+ ですのでbに対してIntのメソッドやプロパティを使用しようとするとコンパイルエラーとなります。
16
+
17
+ しかし、type(of:)はラベルではなく実体を見ていますので実体のMetatypeを返します。