[Swift4] Objective-Cからクラスを利用する

問題

class Hoge: NSObject {
    func piyo () {
        print("test")
    }
}
  • 下記リンク先の方法を用いて
    Swiftで書かれたクラスの関数をObjective-Cから利用しようとしたものの、
    関数呼び出しの部分で下記のエラーが出てしまう。

No known class method for selector ‘関数名’

  • クラスの生成自体はエラーにならない。

  • <プロジェクト名>-Swift.hをみると、関数名が定義されていない。

SWIFT_CLASS("*****")
@interface Hoge : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

環境

  • XCode 9.2
  • Swift4

原因

Swift4から、Objective-Cからクラスを利用する際の記述方法が変わった

  • 参考

解決策

Swiftでのクラス定義を、下記いずれかの方法で記述する。
そうすれば、ちゃんと.hファイルにも定義が追加される。

特定の関数のみ利用する場合

class Hoge: NSObject {
    @objc func piyo () {
        print("test")
    }
}

クラスの関数全体を利用する場合

@objcMembers
class Hoge: NSObject {
    func piyo () {
        print("test")
    }
}

シェアする

  • このエントリーをはてなブックマークに追加

フォローする