gpt4 book ai didi

objective-c - 如何使用 Swift 调用需要 (int *) 类型参数的 Objective-C 方法?

转载 作者:行者123 更新时间:2023-11-30 12:15:32 26 4
gpt4 key购买 nike

现有的 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],无法编译。

最佳答案

int是一个 C 32 位整数,映射到 Swift 为 Int32 .

一个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"文档。

关于objective-c - 如何使用 Swift 调用需要 (int *) 类型参数的 Objective-C 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45481017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com