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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Swift相关文章