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

Objective-C
スポンサーリンク
スポンサーリンク

問題 class Hoge: NSObject { func piyo () { print("test") } } 下記リンク先の方法を用いて Swiftで書かれたクラスの関数をObjective-Cから利用しようとしたものの、 関数呼び出しの部分で下記のエラーが出てしまう。 SwiftとObjective-Cの相互利用する際の注意 - Qiita とりあえずObjCとswiftを相互利用する時にいくつかハマったので書きたいと思います。 ちゃんとここ読んでいればわかることなんですが qiita.com 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が3から4へとメジャーアップデートしました。 それに伴って自分もどんなところが変わったのかというところを調べたり、実際コードに書き起こして試したりしてき dev.classmethod.jp 解決策 Swiftでのクラス定義を、下記いずれかの方法で記述する。 そうすれば、ちゃんと.hファイルにも定義が追加される。 特定の関数のみ利用する場合

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

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

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

コメント