【问题标题】:How do I convert my swift class to an UnsafePointer like the __bridge in objective-c如何将我的 swift 类转换为像 Objective-c 中的 __bridge 这样的 UnsafePointer
【发布时间】:2016-09-25 00:37:41
【问题描述】:

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

.. 展开。这相当于什么?

非常感谢!

【问题讨论】:

    标签: c swift swift2 unsafe-pointers secure-transport


    【解决方案1】:

    答案就在这里:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多