Toll-free bridging and pointer access in Swift

前端 未结 5 1855
轮回少年
轮回少年 2020-12-13 19:33

I am porting an App from Objective-C to Swift and I need to use the following method:

CFStreamCreatePairWithSocketToHost(alloc: CFAllocator!, host: CFString!         


        
5条回答
  •  一个人的身影
    2020-12-13 20:18

    I got it to work, here's my code: Make sure you keep a reference of the connection class somewhere :-)

    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?
            var writeStream: Unmanaged?
    
            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")
        }
    }
    

提交回复
热议问题