Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。255件0swift初心者です。}}このようなコードで動物名の文字列("Dog"や"Cat"等)を使ってその動物名が指すAnimalのサブクラスのメタタイプを得たいです。catType.init()このように動物名を入れるとそれが指すメタタイプを返すDictionaryを作るという方法もあるのですが、このようにするとAnimalのサブクラスを追加した時にこのDictionaryにも追加する必要があるゆえ、追加し忘れた時のことを考えるとバグの元です。他に何かいい方法はないでしょうか。swift4、xcode9.2です。class"なんてキーワードで検索したら、本家StackOverflowの記事に同趣旨のものがありました。class現在のSwiftの実装では(*)一部のObjective-C用実行時関数が動作すると言う事実に基づいています。ちなみに...あるクラスから、そのサブクラスの一覧を取るような関数はObjective-Cにも無いので、実行時のアプリに登録されているクラス(iOSのクラスも含む)を全部リストアップして、指定のクラスがスーパークラスになっているかどうかを調べています。リストには対象のクラス以外も膨大な数が含まれるので、壮絶(と言うほどでもないが...)に無駄な時間を食います。呼び出されるような場所やクリティカルな実行速度が要求される場所で使うのはやめた方が良いでしょう。直接のスーパークラスしか調べていません。よって、指定クラスの直接の子クラスだけが取得できます。孫クラスや子孫クラスも取れるようにするには、ちょっと工夫する必要があるでしょうが、ここでは置いておきます。言うわけで、上記リンク先の承認された記事では「こんな大層なもん別に要らんやん」て感じのユーティリティクラス(ClassInfo)がかなりの行数を取っていたのと、メモリ管理的に怪しそうだったので、エッセンスの部分だけ拝借して、メモリ管理面を改良した関数を作ってみました。9.2でも動くはずです。)以下のような感じで使えます。Animal")}(*)SwiftのクラスにどこまでObjective-Cの実行時関数が正常に働くかは明記されていません。5までに大きな変更はないとは思いますが、なんせ「Objective-C用の実行時間数」なんで、objc_copyClassList()なんかがいつまで期待通り動くかは未知数です。使われるなら、「追加し忘れた時のことを考えるとバグの元」と「いつまで期待通り動くかは未知数」と言うのを天秤にかける必要があるでしょう。個の銅バッジご親切な回答、ありがとうございます。クラスのリストを取得してそれを一つ一つT.Typeがスーパークラスかどうかを確認していく方法ですね。この方法において莫大なクラスの量がある時などに処理しきれずに動作が重くなってしまうことなどはあるのでしょうか。コード中にあるautoreleasepool{}にはどういう意味があるのでしょうか。初心者なのでわからないことばかりで...すみません...><、ご回答いただけると幸いです。macOSのFoundationだけ登録されている状態で、古いMacBookでの実測が33msecほど、膨大なUIKitのクラスが存在する状態のiOSならはっきり体感できるくらいの時間がかかりそうです。Objective-Cがメモリ管理用に使う場所です。今回の場合、大量のクラスオブジェクトがそこに登録されるため、この線をすぎたらそれはもう解放して良いよ、と言うのを示すために使われています。Objective-Cのメソッドなんかをループの中で何度も呼ぶ場合にも、うまく使わないとすぐにメモリ不足のエラーになったりします。7:47親身な回答、ありがとうございます。動作が重くなってしまうことについては、古いMacだと一瞬ハッキリと止まってしまうけど新しければ問題ないということですね。autoreleasepoolについては、そのブロックが終わったらそのブロック内のメモリを解放するために使うもので、大量のメモリを登録する時に使うということなのですね。iOSならゲームアプリのように「1フレームごとに毎回呼び出す」ような処理ではなく、「新しい画面を開くたびに1回だけ呼び出す」ような処理なら、新しければ気にならないだろうと思います。ついては「ARC」「リファレンスカウント」「循環参照」なんて辺りを気にしだすようになったら、また思い出していただけると理解が深まるかと思います。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。会を開催します🎉コメントで回答する理由を教えてくださいサイトの未翻訳箇所を見つけて、もくもく会で直しましょう関連する質問3SwiftでUIAlertControllerの独自クラスを作りたい1Swiftで、xibで作成したTableViewCellに、xibで作成したViewを追加1storyboardの遷移でエラーが出ます。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。