SwiftからObjective-cのコードを呼び出すときの注意点

  • 13
    Like
  • 0
    Comment
More than 1 year has passed since last update.

SwiftとObjective-cでそれぞれ同じ関数名を持ったクラスがあったとする。

SwiftCls.Swift
class  SwiftCls:NSObject  {
    func executePeroPero(target:String,Frequency frequency:Int) -> Void{
        for i in 0..frequency
        {
            NSLog("%@ぺろぺろ",target)
        }
    }
}
ObjcCls.m
@implementation ObjcCls
-(void)executePeroPero:(NSString*)target Frequency:(int)frequency{
    for(int i = 0;i< frequency;i++)
    {
        NSLog(@"%@ぺろぺろ",target);
    }
}
@end

それぞれをSwift上からコールすると、同じ関数名なのに、Objective-cで書かれたほうがエラーになってしまう。

hoge.Swift
var swift = SwiftCls();
swift.executePeroPero("フェイトちゃん",Frequency:3)

var objc = ObjcCls();
objc.executePeroPero("フェイトちゃん",Frequency:3) // コンパイルエラーがおきる        

Objective-cで書かれた関数の、最後の引数のラベルは小文字で書かないといけないようだ。(現時点では?)
エラーが起きないようにするには以下。

hoge.Swift
var objc = ObjcCls();
objc.executePeroPero("フェイトちゃん",frequency:3)
// フェイトちゃんぺろぺろ
// フェイトちゃんぺろぺろ
// フェイトちゃんぺろぺろ