gpt4 book ai didi

ios - 在swift中将值输出到typedef指针

转载 作者:行者123 更新时间:2023-11-28 11:34:40 24 4
gpt4 key购买 nike

我几乎可以肯定这个标题不正确,但这里是...

我正在桥接到 Objective-C 类以设置 typedef。桥已设置,我可以正确声明 typedef var。

在 Objective-C 中,我还从同一个类中调用了一个方法,该方法在调用时会向变量 TestHandle 输出一个值。

var TestHandle : TESTHANDLE
TestInit(&TestHandle)

当我使用 Swift 5 尝试此操作时,出现此错误:

Cannot convert value of type 'inout TESTHANDLE' (aka 'inout UnsafeMutableRawPointer') to expected argument type 'UnsafeMutablePointer<TESTHANDLE?>?' (aka 'Optional<UnsafeMutablePointer<Optional<UnsafeMutableRawPointer>>>')

有什么建议吗?

最佳答案

一些观察:

  • TESTHANDLE似乎是 UnsafeMutableRawPointer 的别名
  • &testHandle正在获取 testHandle 的引用(指向位置的指针) , 产生 inout UnsafeMutableRawPointer 类型的值
  • 如错误所述,您的 TestInit函数接受类型为 UnsafeMutablePointer<TESTHANDLE?>? 的变量,又名 Optional<UnsafeMutablePointer<Optional<UnsafeMutableRawPointer>>>

Swift 有一些关于如何 & 的规则自动桥接到各种指针类型,但坦率地说,我不太了解它们。

据我所知,Swift 指针类型不能表示 nil (0x000...000)。为此,它们需要被包裹在一个可选的。所以当你看到类型时

Optional<UnsafeMutablePointer<Optional<UnsafeMutableRawPointer>>>

它实际上是两个“语义”部分:

Optional<UnsafeMutablePointer<    Optional<UnsafeMutableRawPointer>    >>
↳ A nullable pointer to ... ↳ ... something that's a nullable pointer of unspecified (void) type

你得到错误的原因是因为 &testHandle只能桥接你的UnsafeMutableRawPointerOptional<UnsafeMutablePointer<UnsafeMutableRawPointer>> , 但不是必需的 Optional<UnsafeMutablePointer<Optional<UnsafeMutableRawPointer>>> (不同之处在于缺少“内部”可空性层)。为了解决这个问题,让你的 testHandle可选,你自己:

var testHandle: TESTHANDLE? // a.k.a. Optional<TESTHANDLE>, a.k.a. Optional< UnsafeMutableRawPointer>

然后,当您使用 &运算符,Swift 会将您的值包装在所需的 Optional<UnsafeMutablePointer< ... >> 中外层。

typealias TESTHANDLE = UnsafeMutableRawPointer

func testInit(_ p: UnsafeMutablePointer<TESTHANDLE?>?) {
print("Success!")
}

var testHandle: TESTHANDLE? = nil
testInit(&testHandle)

关于ios - 在swift中将值输出到typedef指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55840722/

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