当前位置: 首页 > 面试题库 >

Swift中的免费电话桥接和指针访问

连俊智
2023-03-14
问题内容

我正在将一个应用程序从Objective-C移植到Swift,我需要使用以下方法:

CFStreamCreatePairWithSocketToHost(alloc: CFAllocator!, host: CFString!, port: UInt32, \
readStream: CMutablePointer<Unmanaged<CFReadStream>?>, \
writeStream: CMutablePointer<Unmanaged<CFWriteStream>?>)

原来的逻辑看起来像这样(几个网站似乎对此表示同意):

CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)(host), port, \
                                   &readStream, &writeStream);

NSInputStream inputStream = (__bridge_transfer NSInputStream *)readStream;
NSOutputStream outputStream = (__bridge_transfer NSOutputStream *)writeStream;

借助免费的桥接功能,效果很好。但是,“快速空间”中不存在ARC,并且类型系统已更改。

如何将流转换为

CMutablePointer<Unmanaged<CFReadStream>?>, and
CMutablePointer<Unmanaged<CFWriteStream>?>

然后NSStreamCFStreamCreatePairWithSocketToHost调用之后将它们转换回子类?


问题答案:

我可以使用它,这是我的代码:确保在某处保留连接类的引用:-)

class Connection : NSObject, NSStreamDelegate {
    let serverAddress: CFString = "127.0.0.1"
    let serverPort: UInt32 = 8443

    private var inputStream: NSInputStream!
    private var outputStream: NSOutputStream!

    func connect() {
        println("connecting...")

        var readStream:  Unmanaged<CFReadStream>?
        var writeStream: Unmanaged<CFWriteStream>?

        CFStreamCreatePairWithSocketToHost(nil, self.serverAddress, self.serverPort, &readStream, &writeStream)

        // Documentation suggests readStream and writeStream can be assumed to
        // be non-nil. If you believe otherwise, you can test if either is nil
        // and implement whatever error-handling you wish.

        self.inputStream = readStream!.takeRetainedValue()
        self.outputStream = writeStream!.takeRetainedValue()

        self.inputStream.delegate = self
        self.outputStream.delegate = self

        self.inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
        self.outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

        self.inputStream.open()
        self.outputStream.open()
    }

    func stream(stream: NSStream, handleEvent eventCode: NSStreamEvent) {
        println("stream event")
    }
}


 类似资料:
  • 问题内容: 我的应用程序使用某种复杂的不可变数据结构,该结构以二进制文件编码。我需要在字节级别访问它,避免任何复制。通常,我将使用C或C ++指针算术和类型转换来访问和解释原始字节值。我想对Swift做同样的事情。 我发现以下作品: 但是,我不确定它的效率如何。每次我调用对象时都要做和分配对象,或者它们只是用于处理指针的语法糖吗? 在Swift中有更好的方法吗? 编辑: 我创建了一个小的Objec

  • 公费电话是一种高效的沟通方式,它由公司统一付费,员工可免费使用进行单人或多人沟通,快速发起电话会议。 已创建的企业的可免费体验30分钟的公费电话进行试用。企业提交营业执照并审核通过后,可领取1000分钟免费通话时长。 基础设置 设置入口:【管理后台】>【企业应用】>【公费电话】查看 停用/启用公费电话。(默认为启用状态) 点击话单,可查看详细通话清单,以供核对。 充值支付 点击【充值】,购买通话时

  • Swift与OC桥接 第一次学习Swift时是2.1 & 2.2版本, 后来升级到3.0后只是简单的看过一点点变化, 如今再次学习Swift已经是5.3, 之前写Swift就是生搬硬套, 很多框架仍然是通过CocoaPods安装的OC类库, 但这并不会是一个长久的方案, 所以建议那些还没有完全熟悉Swift的开发者今早学习切换到Swift, 尽可能通过Swift实现的就不要再桥接OC文件 Swif

  • 问题内容: 我正在尝试将答案转换为Swift并失败。似乎我正在传递一个应该何时传递一个,而我似乎无法解决我的问题。据我了解的Swift指针文档(不多),这些应该可以互换。 下面的更多信息。 这是目标C: 这是我所掌握的Swift语言(很多行可以简化类型检查) 该签名是: 最后一行的错误是: 问题答案: 与C函数进行交互时,您不能依靠编译器的错误消息-逐个参数地将其分解,然后单击命令直至知道要使用的

  • 我有一个具有指向指针的隐式转换运算符的类。释放该指针无效。当与运算符一起使用时,是否可以阻止向指针的转换?我想要一个编译时错误。对于函数,我可以删除将类作为参数的重载。 我认为需要一些聪明的东西来达到预期的效果。 隐式转换的一个用例:比如说实现了一个限定范围的数组。转换使几乎减少了alloc/dealloc对的替换。需要显式转换的模板和迭代器。否则,类C函数的调用站点保持不变。

  • 接电话     可接收其他 Skype 联系人拨打的电话。开始通话前,需先让支援PSP™版 Skype 的音频输入设备连接PSP™主机。 1. 登入 Skype ,并将登入状态调整为[ 在线]等,可接听电话的状态。 登入状态为[ 脱机]等状态时,无法接听电话。 2. 铃声响起,并显示来电画面后,选择[接听],即能开始通话。 提示 通话中无法接听其他 Skype 联系人或普通电话拨打的电话。