Swift 3 inputstream et outputtream se connectant mais pas de stream

J'ai un problème avec la connection à un socket Java avec StreamDelegate dans Swift 3. Je suis actuellement en train de réécrire un gros projet Objective C où ce morceau de code fonctionne comme un charme, mais je n'arrive pas à get pour travailler dans Swift 3. Le problème que j'ai est que la fonction de stream ne fonctionne jamais. Alors "Stream!" n'est jamais imprimé. Le Stream.Status après self.outputStream.open() est appelé 1 (ouverture). Le code s'exécute sans problème et "Ouverture des stream sur le thread:" est appelé.

La socket à laquelle j'essaye de me connecter est une socket Java.

Note: J'ai expérimenté que le débogueur a imprimé un message disant qu'il n'y a pas de gestionnaire attaché, mais je ne sais pas si c'est lié.

J'ai trouvé quelques messages similaires, mais pas sur ce problème précis. Si quelqu'un a des idées, je serais heureux de les entendre! Merci à tous ceux qui essaient d'aider.

 import Foundation @objc class SocketConnector : NSObject, StreamDelegate { var inputStream : InputStream! var outputStream : OutputStream! var lock : NSRecursiveLock override init () { lock = NSRecursiveLock.init() } func connect (host : Ssortingng, port : Int) -> Bool { lock.lock() var readStream : Unmanaged<CFReadStream>? var writeStream : Unmanaged<CFWriteStream>? CFStreamCreatePairWithSocketToHost(nil, host as CFSsortingng!, UInt32(port), &readStream, &writeStream) inputStream = readStream!.takeRetainedValue() outputStream = writeStream!.takeRetainedValue() self.inputStream.delegate = self self.outputStream.delegate = self self.inputStream.schedule(in: RunLoop.current, forMode: .defaultRunLoopMode) self.outputStream.schedule(in: RunLoop.current, forMode: .defaultRunLoopMode) self.inputStream.open() self.outputStream.open() print("Opening streams on thread: %@", Thread.current) lock.unlock() return true } func stream (aStream : Stream, handleEvent eventCode : Stream.Event) { print("Stream!") switch eventCode { case Stream.Event.hasBytesAvailable: print("Stream has bytes:"); break; case Stream.Event.errorOccurred: print("Stream error occurred: %@",aStream.streamError?.localizedDescription) case Stream.Event.openCompleted: print("Stream has bytes:") break case Stream.Event.endEncountered: print("Stream ended") self.closeStreams() break default: break } } 

Votre outil n'est pas compatible avec la méthode stream de StreamDelegate. Vous devez changer pour ceci:

stream func (_ aStream: Stream, gérer eventCode: Stream.Event)

au lieu de

stream func (aStream: Stream, handleEvent eventCode: Stream.Event