在SWIFT编程中如果想调用C语言编写的函数则需要通过桥接文件来实现。在桥接文件中通常使用的OC代码,在OC中就可以直接操作调用C的函数。
1. 在Swift中读C指针
下面桥接文件中的方法会返回一个int指针,即C术语里面的(int *):
@interface PointerBridge : NSObject {
int count;
}
- (int *) getCountPtr;
@end
@implementation PointerBridge
- (instancetype) init {
self = [super init];
if(self) {
count = 23;
}
return self;
}
- (int *) getCountPtr {
return &count;
}
@end
在SWIFT中调用桥接文件时可以通过如下方式获得int*的内容。
let bridge = PointerBridge()
let theInt = bridge.getCountPtr()
print(theInt.memory)
这里的theInt.memory
得到的值就是23。
2. 在Swift中转递C指针给桥接文件
- (void) setCountPtr:(int *)newCountPtr {
count = *newCountPtr;
}
此时在SWIFT代码中传给setCountPtr
函数的参数需为int *类型。在SWIFT中可以通过UnsafeMutablePointer<Int32>
类型来操作。
let bridge = PointerBridge()
let theInt = bridge.getCountPtr() print(theInt.memory)
let newIntPtr = UnsafeMutablePointer<Int32>.alloc(1)
newIntPtr.memory = 100 bridge.setCountPtr(newIntPtr)
print(theInt.memory) // 100
通过这种方式,bridge中的count就被修改为了100。需要注意的是给UnsafeMutablePointer<Int32>
构造方法传入的参数是需要分配空间的对象的个数,在这里只需要一个Int32对象,所以我们传入1即可。