LoginSignup
13

More than 5 years have passed since last update.

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

Posted at

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)
// フェイトちゃんぺろぺろ
// フェイトちゃんぺろぺろ
// フェイトちゃんぺろぺろ        

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13