Objective-Cで、クラスの名前が文字列である場合にクラスを取得してメッセージを送信する方法はありますか?たとえば、次のような関数func
はありfunc(@"NSString") == [NSString class]
ますか?
これを知りたいのは、作業中の言語用のダイナミックリンカーライブラリを構築していて、Objective-Cライブラリへのインターフェイスを持たせたいからです。
Objective-Cで、クラスの名前が文字列である場合にクラスを取得してメッセージを送信する方法はありますか?たとえば、次のような関数func
はありfunc(@"NSString") == [NSString class]
ますか?
これを知りたいのは、作業中の言語用のダイナミックリンカーライブラリを構築していて、Objective-Cライブラリへのインターフェイスを持たせたいからです。
はい—実際には2つです。Foundationタイプのフレームワーク(Cocoa、Cocoa Touch、GNUstepなど)を使用している場合は、とまったくNSClassFromString()
同じ関数を使用できますfunc
。フレームワークに依存したくない場合は、同様のランタイム関数がありますobjc_getClass()
。これは、を受け取り、const char*
指定されたクラスを返します(またはnil
、何も見つからない場合)。
NSClassFromString(NSString className)
名前からクラスオブジェクトを取得するために使用できます。
お役に立てれば!