LoginSignup
2
1

More than 3 years have passed since last update.

NSClassFromStringで、ハマった時の解決法

Last updated at Posted at 2019-09-02

はじめに

NSClassFromStringは、クラスの名前からClassを生成できる便利なメソッドですがswiftで使用するときにNSという前時代のprefixがついているように癖があります。そこの話をちゃちゃっとまとめてみました。

swiftでのクラスの取得方法の注意点

NSClassFromStringで取得できるクラスはswiftでは、モジュールの名前空間に影響されてしまい、モジュール名(Project Name)+ "." + ClassNameというストリングを渡さなければいけません。またモジュール名を渡さない場合は、定義しているクラスの頭に

@objc(ClassName)
class ClassName : NSObject {
...
}

として、@objc(ClassName)をつけてやるとNSClassFromStringからクラス名だけで取得できるようにはなっています。

要注意モジュール名

自分がハマったのですが、module + "." + ClassNameとしてもどうしてもNSClassFromStringがnilを返してくる場合がありました。classに@objcをつけるとClassNameだけできちんと値が返ってきたので、渡していClassNameが間違っているというわけではないようで、色々調べたところプロジェクト名に"-"がついている場合、その"-"の文字を"_"に置き換えて、moduleネームに渡さないとはいけないようです,つまり、

my-project-name

の場合

my_project_name

になります。

まとめ

NSClassFromStringを使う場面もそんなにないかもですが、気をつけて使用しましょう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1