Swift 2中的指针与Objective-C指针相互传递

在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指针给桥接文件

假如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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值