在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。
假如oc桥接文件中有如下的一个函数接口
- (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即可。
Reference:
http://www.csdn.net/article/2015-09-07/2825641
以上是内存溢出为你收集整理的Swift 2中的指针与Objective-C指针相互传递全部内容,希望文章能够帮你解决Swift 2中的指针与Objective-C指针相互传递所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)