Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

StreamDelegate em uma NSObject

Gostaria de criar uma classe utilitária que herda de NSObject (não necessariamente) e implementa StreamDelegate para a leitura e escrita dos Streams, porem a função stream nunca é chamada. Ja implementei o código da mesma maneira na minha UIView e rodou sem problemas. Gostaria de saber oq estou fazendo errado, creio que deveria herdar de outra classe ou chamar a RunLoop dentro de alguma thread especifica.

open class BluetoothCommunication: NSObject, StreamDelegate{
let device:EAAccessory
init(device:EAAccessory){
    self.device = device
}
 public func enableStream(){
            print(device.name)
            let session =  EASession(accessory: device, forProtocol: device.protocolStrings[0])
            outputStream = session.outputStream!
            inputStream = session.inputStream!

            outputStream?.delegate = self
            inputStream?.delegate = self
            inputStream?.schedule(in: .main, forMode: .commonModes)
            outputStream?.schedule(in: .main, forMode: .commonModes)
            inputStream?.open()
            outputStream?.open()


        }

 public func stream(_ aStream: Stream, handle eventCode: Stream.Event){
        print("stream called")
    }
}
1 resposta
solução!

Consegui solucionar o problema, segundo minhas pesquisas quando a leitura ou escrita de streams é feita fora da Thread principal é necessário abrir uma thread para que o método seja executado em background

  DispatchQueue.global(qos: .background).async {
            enableStream()
}