gpt4 book ai didi

c - 如何将我的 swift 类转换为像 objective-c 中的 __bridge 这样的 UnsafePointer

转载 作者:太空宇宙 更新时间:2023-11-04 04:29:55 24 4
gpt4 key购买 nike

我正在尝试实现到 SecureTransport 的快速桥接C 库。我“认为”只要我知道如何在我的 sslReadCallback/sslWriteCallback 实现中从它读取内容,我就可以将任何东西作为连接传递。这是我正在使用的假设。当我查看 SSLConnectionRef 的定义时似乎就是这种情况:

/* Opaque reference to an I/O connection (socket, endpoint, etc.) */
public typealias SSLConnectionRef = UnsafePointer<Void>

所以我只需要将我的类变成UnsafePointer。不幸的是编译器不喜欢我的尝试。谁能给我提示?

func startSSLProcess()
{
self.sslContext = SSLCreateContext(kCFAllocatorDefault, SSLProtocolSide.ClientSide, SSLConnectionType.StreamType)
if let sslContext = self.sslContext
{
SSLSetIOFuncs(sslContext, sslReadCallback, sslWriteCallback)
SSLSetConnection(sslContext, UnsafePointer(self)) // <-- error
SSLSetSessionOption(sslContext, SSLSessionOption.BreakOnClientAuth, true)
SSLHandshake(sslContext)
}
}

在 GCDAsyncSocket 中,它是这样做的:

status = SSLSetConnection(sslContext, (__bridge SSLConnectionRef)self);

SubZeroGCDAsyncSocket *asyncSocket = (__bridge SubZeroGCDAsyncSocket *)connection;

..展开。什么是 swift 的等价物?

非常感谢!

最佳答案

答案在这里:

How to cast self to UnsafeMutablePointer<Void> type in swift

所以现在我执行以下操作:

func startSSLProcess()
{
self.sslContext = SSLCreateContext(kCFAllocatorDefault, SSLProtocolSide.ClientSide, SSLConnectionType.StreamType)
if let sslContext = self.sslContext
{
SSLSetIOFuncs(sslContext, sslReadCallback, sslWriteCallback)
SSLSetConnection(sslContext, UnsafePointer(Unmanaged.passUnretained(self).toOpaque()))
SSLSetSessionOption(sslContext, SSLSessionOption.BreakOnClientAuth, true)
SSLHandshake(sslContext)
}
}

然后我像这样打开:

    let transportWrapper:SecureTransportWrapper = Unmanaged<SecureTransportWrapper>.fromOpaque(COpaquePointer(connection)).takeUnretainedValue()

用您自己的类型替换 SecureTransportWrapper。

关于c - 如何将我的 swift 类转换为像 objective-c 中的 __bridge 这样的 UnsafePointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470481/

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