読者です 読者をやめる 読者になる 読者になる

文字列からクラスのインスタンスを生成・メソッドを実行

NSClassFromStringで文字列からインスタンスの生成・メソッドの実行が行えます。
Swift3で文字列からクラスのインスタンスを生成する場合は以下のようになります。

@objc(Foo) // Objective-C側で利用可能にすることが必要
class Foo: NSObject {
  func bar() {
    print("DEKITA")
  }
}

let type: NSObject.Type = NSClassFromString(controllerName + "Controller") as! NSObject.Type
let foo: Foo = type.init() as! Foo // インスタンスを生成
foo.bar() // "DEKITA"

文字列からメソッドはSelectorで

let selector: Selector = NSSelectorFromString("bar")
foo.perform(selector)

値を返す場合はtakeUnretainedValueでキャストできます。仕組みはまだ理解していません。

let selector: Selector = NSSelectorFromString("getString")
foo.perform(selector).takeUnretainedValue() as! String
雑感

@objcいちいち宣言しないといけないのめんどいなあ
自動化できないものか