gpt4 book ai didi

swift - 在 Swift 中与指向 Int 数组的 C 指针互操作

转载 作者:可可西里 更新时间:2023-11-01 00:22:37 25 4
gpt4 key购买 nike

我有一个具有此功能的遗留代码库:

-(void)foo: (int *)buffer {
myArray[0] = buffer[0];
myArray[1] = buffer[1];
myArray[2] = buffer[2];
myArray[3] = buffer[3];
}

在Swift中,这个方法是这样写的:

func foo(buffer: UnsafeMutablePointer<Int32>) {
}

int指针现在被认为是 UnsafeMutablePointer<UInt32> .我在访问 buffer 的下标时遇到问题在 swift ;即我不能调用 buffer[0]像这样:

func foo(buffer: UnsafeMutablePointer<Int32>) {
myArray[0] = buffer[0] // won't compile, buffer treated as Int32
}

出于绝望,即使知道UnsafeMutablePointer<Int32>最终解析为 Int32输入 Swift,我尝试了以下方法:

guard let buffer = buffer.memory as? [Int] else { fatalError() }

guard let buffer = buffer as? [Int] else { fatalError() }

guard let buffer = buffer.memory as? [Int32] else { fatalError() }

guard let buffer = buffer as? [Int32] else { fatalError() }

有人能给我指明正确的方向,让我了解如何像 Objective-C 代码那样访问下标成员吗?

最佳答案

你想多了:

class MyClass {
var myArray = [Int32](count: 4, repeatedValue: 0)

func foo(buffer: UnsafeMutablePointer<Int32>) {
for i in 0..<4 {
myArray[i] = buffer[i]
}
}
}

您可以将 myArray 更改为 [Int32] 以使其匹配 buffer。或者您可以将 buffer 转换为 Int:

myArray[i] = Int(buffer[i])

关于swift - 在 Swift 中与指向 Int 数组的 C 指针互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998389/

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