Posted at

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

More than 5 years have 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)
// フェイトちゃんぺろぺろ
// フェイトちゃんぺろぺろ
// フェイトちゃんぺろぺろ