目的
Swift で第一引数がある関数を定義して、 Objective-C で呼び出すとき何度か嵌ったのでメモしておきます。
嵌った例
Swift の関数
@objcMembers class Calc: NSObject {
static func add(a:Int, b:Int) -> Int {
return a + b
}
}
Objective-C 側
[Calc add:2 b:3];
下記のようなエラーが発生しました。
No visible @interface for 'Calc' declares the selector 'add:b:'
解決した方法
Swift の関数の第一引数にラベルをつけない指定をしました。
Objective-C の場合は第一引数にラベルをつけないため、_
を指定する必要があります。
@objcMembers class Calc: NSObject
static func add(_ a:Int, b:Int) -> Int {
return a + b
}
}
Objective-C 側は変えずに下記で呼び出せます
[Calc add:2 b:3];
@objcMembers について
class の前の @objcMembers
は、
Swift のコードを Objective-C のコードを呼び出すために必要です。