元始天尊 发表于 2021-8-6 12:46:31

越狱开发Swift之从C/ObjC调用Swift函数

本帖最后由 元始天尊 于 2021-8-6 12:53 编辑



## 修饰符cdecl

  编译器会为当前swift函数增加wrapper函数,方便从C调用

## 修饰符objc

  注意,在ObjC类前和类方法前都要加该修饰符。编译器会为所有类方法增加wrapper方法,方便从ObjC调用

## 修饰符silgen_name

  编译器会直接将当前函数编译成C函数,在Swift中调用时也以C函数方式进行

```
@_cdecl("runoob0_cdecl")
func runoob0(i:Int) -> Int {
    return i+1;
}

@objc
class runoobcls:NSObject {
    @objc func runoob1(i:Int) -> Int {
      return i+1;
    }
}

@_silgen_name("runoob2_silgen") func runoob2(i:Int) -> Int {
    for i in {
      print(i)
    }
    return i+1;
}

// 从Swift调用
var ret1 = runoob0(i:0);
let g:runoobcls = runoobcls();
var ret2 = g.runoob1(i:1);
var ret3 = runoob2(i:2);
print("in swift \(ret1) \(ret2) \(ret3)")
// 从ObjC调用
extern int runoob0_cdecl(int);
int ret0 = runoob0_cdecl(10);
runoobcls* g = [ init];
int ret1 = ;
extern int runoob2_silgen(int);
int ret2 = runoob2_silgen(12);
NSLog(@"in c %d %d %d", ret0, ret1, ret2);
```


页: [1]
查看完整版本: 越狱开发Swift之从C/ObjC调用Swift函数