Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Como escrever uma string em outputstream

Gostaria de escrever uma string em um outPutStream de uma conexão bluetooth que estabeleci usando EAAccessory, porem esse outputstream sempre "hasSpaceAvailable" false. Creio que o erro esteja na forma com que estou tentando escrever a mensagem no outpustream.

Codigo atual:

var session =  EASession(accessory: device, forProtocol: device.protocolStrings[0])
            var outputStream = session.outputStream
            print(write("teste", out: outputStream!))
func write(_ string: String, encoding: String.Encoding = String.Encoding.utf8, allowLossyConversion: Bool = true, out:OutputStream) -> Int {
        print(out.hasSpaceAvailable)
        if let data = string.data(using: encoding, allowLossyConversion: allowLossyConversion) {
            var bytesRemaining = data.count
            var totalBytesWritten = 0

            while bytesRemaining > 0 {
                let bytesWritten = data.withUnsafeBytes {
                    out.write(
                        $0.advanced(by: totalBytesWritten),
                        maxLength: bytesRemaining
                    )
                }
                if bytesWritten < 0 {
                    // "Can not OutputStream.write(): \(self.streamError?.localizedDescription)"
                    return -1
                } else if bytesWritten == 0 {
                    // "OutputStream.write() returned 0"
                    return totalBytesWritten
                }

                bytesRemaining -= bytesWritten
                totalBytesWritten += bytesWritten
            }

            return totalBytesWritten
        }

        return -1
    }

Desde ja, obrigado pela ajuda.

1 resposta
solução!

Consegui solucionar usando essa função que criei


    fileprivate func __writeData(stream:OutputStream) {
        lol =  false
        while (stream.hasSpaceAvailable) && ((_writeData?.length)! > 0) {

            let bytes = (_writeData?.bytes)!


            let bytesWritten = stream.write(bytes.assumingMemoryBound(to: UInt8.self), maxLength: (_writeData?.length)!)
            if bytesWritten == -1 {
                print("write error")
                break;
            } else if bytesWritten > 0 {
                _writeData?.replaceBytes(in: NSMakeRange(0, bytesWritten), withBytes: nil, length: 0)
            }
        }
    }