如何将swift类转换为UnsafePointer,如objective-c中的__bridge



我正在尝试实现一个到SecureTransport C库的swift桥接。我"认为"只要我知道如何在我的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;

打开包装。这有什么快速的等价物?

非常感谢!

答案在这里:

如何将self强制转换为UnsafeMutablePointer<无效>键入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。

最新更新