如何使用Swift调用期望类型为(int *)的参数的objective-C方法?

时间:2015-05-07 14:18:23

标签: objective-c swift

现有的Objective-C方法具有以下特征:

-(BOOL)barcodeSetScanBeep:(BOOL)enabled volume:(int)volume beepData:(int *)data length:(int)length error:(NSError **)error;

请注意beepData:期望(int *)。

可以通过传入C数组从Objective-C使用此方法:

int beepData[] = {1200,100};

如何从Swift调用相同的方法?我最好的尝试let beepData: [Int] = [1200, 100]不会编译。

1 个答案:

答案 0 :(得分:5)

int是一个C 32位整数,并以Int32映射到Swift。

int *参数映射到Swift为UnsafeMutablePointer<Int32>, 并且您可以使用&变量数组作为“inout参数”传递。

所以它应该大致如下:

var beepData : [ Int32 ] = [ 1200, 100 ]
var error : NSError?
if !DTDevices.sharedDevice().barcodeSetScanBeep(true, volume: Int32(100),
                beepData: &beepData, length: Int32(beepData.count),
                error: &error) {
    println(error!)
}

Swift还定义了一个类型别名

/// The C 'int' type.
typealias CInt = Int32

因此,如果您想强调这一点,可以在上面的代码中用Int32替换CInt 你正在使用C整数。

有关详细信息,请参阅"Interacting with C APIs"文档中的"Using Swift with Cocoa and Objective-C"