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

SwiftとObjective-Cの相互利用する際の注意 - Qiita
とりあえずObjCとswiftを相互利用する時にいくつかハマったので書きたいと思います。ちゃんとここ読んでいればわかることなんですが…
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からクラスを利用する際の記述方法が変わった
- 参考

[iOS 11] Swift 4は前バージョンから何が変わったか比較した | DevelopersIO
解決策
Swiftでのクラス定義を、下記いずれかの方法で記述する。
そうすれば、ちゃんと.hファイルにも定義が追加される。
特定の関数のみ利用する場合
class Hoge: NSObject {
@objc func piyo () {
print("test")
}
}
クラスの関数全体を利用する場合
@objcMembers
class Hoge: NSObject {
func piyo () {
print("test")
}
}
コメント