Avatar
実装上こうなってるからできないという理由とは独立して、なぜそのような設計にしたのかという話があると思います。 Java 等ではインタフェース型変数はアドレスを格納するだけで vtable からメソッドの実体を引くので、変数は( 64 ビット環境なら) 8 バイトで済みますよね? Swift の Class Existential Container だと Witness Table へのポインタを含むために↓では 16 バイトになってしまうわけですが、そのような設計にした理由は何だと考えられますか? @swift-5.0.3 protocol Animal: AnyObject { func foo() -> Int } class Cat: Animal { func foo() -> Int { return 42 } } let cat = Cat() let animal: Animal = cat print(MemoryLayout.size(ofValue: cat)) print(MemoryLayout.size(ofValue: animal))