现有的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]
不会编译。
答案 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"。