如何将Swift类转换为UnsafePointer,例如Objective-C中的__bridge

迈克·S

我正在尝试实现到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;

..展开。这有多快?

非常感谢!

迈克·S

答案在这里:

如何快速将自身转换为UnsafeMutablePointer <Void>类型

因此,我现在执行以下操作:

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。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在python中,如何将类对象转换为dict

如何将AnyClass转换为特定的类并在Swift中动态初始化它?

如何将Objective-C App委托转换为Swift?

如何将整数转换为Objective-C中的相应单词?

Objective-C如何将NSURL转换为NSString?

如何将整个文件夹或程序包从Java转换为Objective-C?

在TypeScript中,如何将布尔值转换为数字,例如0或1

如何将此Swift语法转换为Objective C?

如何将C ++排序函数转换为Swift?

如何将Objective-C`sortedArrayUsingSelector:NSSelectorFromString`转换为swift?

如何将该加密功能从Swift转换为Objective-C?

如何将Swift类传递给需要类的Objective-C方法?

如何将Objective-C工厂方法转换为Swift便捷初始化程序?

如何将目标c中的NSDictionary转换为Swift?

我如何将其从Objective-C转换为Swift

如何将控制器转换为特定协议而不是Swift中的类?

Objective-C如何将击键转换为ASCII字符代码?

如何将此NSTimeInterval行从Swift转换为Objective-C

如何将此Swift语法转换为Objective-C?

如何将Objective-C块转换为Swift闭包?

如何将Swift代码转换为目标C代码

如何将Objective-C代码转换为Swift代码-错误处理,iOS

将代码从 Swift 转换为 Objective C?

在枚举类中,如何将值转换为日期?

如何将普通函数转换为类中的函数?

将 Swift 转换为 Objective C

如何将 Swift 中的参数传递给采用 UnsafePointer 的 C 函数?

如何将 kotlin 中的密封类转换为 Java

c ++ 11如何将遗留类转换为模板