un peu d'aide simple pour un débutant
bonjour,
je suis nouveau dans le domaine du développement sur mac et iphone ,j'ai donc choisi de commencer en swift ,j'essaye de communiquer avec un automate en wifi ,j'ai d'ailleurs aucun soucis de communication avec un autre langage sous windows .
il faut donc envoyer des trames avec un socket ,j'ai choisi CFStreamCreatePairWithSocketToHost ,l'envoie fonctionne parfaitement mais le retour du résultat doit se faire attendre ,pour l'obtenir pour l'instant je fait un point d'arrêt juste après le write et avant le read ...
MonoutputStream.write(&buffer, maxLength: data.length)
println(buffer) // = [65, 84, 90, 13]
///je fais un point d'arrêt ici pour lui laissé le temps de renvoyer le résultat
var readByte = [UInt8](count: 80, repeatedValue: 0)
MoninputStream.read(&readByte, maxLength: 100)
println(readByte) // = [65, 84, 90, 13, 13, 13, 69, 76, 77, 51, 50, 55, 32, 118, 49, 46, 53, 13, 13, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
j'aurai besoin d'aide pour éviter de tourner en rond pendant des heures et comprendre plus rapidement les subtilités des classes etc ...
il me faudrait une boucle qui cumule le read et qui en sort quand il trouve dans la chaine le marqueur de fin qui doit être 13, 13, 62 (rc,rc,>) et qui en sort aussi automatiquement au bout de 100 passage pour éviter de tourner en rond comme moi .
il faudrait aussi retranscrire le tableau d'UInt8 en chaine ,j'ai essayer 50 trucs mais rien ne va ...
si quelqu'un avait le temps de m'aider ,ce serais super ...,c'est pas bien difficile mais je plane grave dans ce langage swift ou objective C
Réponses
Tu utilises des NSStreams, c'est ça ?
Tu as une méthode de NSStream Delegate (stream:handleEvent:)
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Streams/Articles/WritingOutputStreams.html
Regardes le lien de Larme. Ton approche n'est pas bonne. Il ne faut surtout pas tourner en rond à faire un read. L'idée de base est de recevoir des évènements de manière asynchrone lorsque des données sont dispo.
A la reception des données, tu stockes dans un NSMutableData. Et pour la conversion en string, je dirais de passer par la méthode de NSString:
J'ai pas testé, mais je vais donner quelques pistes possibles (en Objective-C car je ne parle pas le Swift, mais vu que c'est du Cocoa la logique devrait être la même et la traduction faisable).
Un NSMutableData auquel tu ajoutes au fur et à mesure tes bytes reçus dans stream:handleEvent:
Tu peux utiliser ça:
Grâce à ça, tu peux effectuer des rangeOfData:option:range: qui fonctionne grosso-modo comme la version analogue de NSString pour trouver des substrings :
merci pour vos réponses Larme et Mala mais vous êtes en objective C que je comprends très très mal ,je commence avec swift et Xcode car plus en corrélation avec mon petit cerveau ,je débute et c'est déjà bien galère si en plus le rajoute une grosse couche d'objective C ,la je descends du train ...
je comprends bien que l'on peut mettre un événement sur la réception mais je ne sais pas comment ,j'ai trouver çà mais c'est de l'obj c
Tu illustres bien tout le paradoxe de Swift. Les newbies foncent dessus parce que c'est aware et que c'est l'avenir sauf que dans les faits c'est un langage encore en maturation et beaucoup moins développé qu'Objective-C en terme de ressources sur la toile.
Allez hop! hop! hop! les pro Swift! On vient aider notre ami.
C'est pour ça que je dis que ceux qui apprennent le Swift devraient apprendre quelques bases en Objective-C, au moins être capable de comprendre la syntaxe pour faire de la traduction.
Sinon, styck007, c'est possible d'utiliser la balise CODE ?
moi ce qui m'énerve, c'est qu'on trouve de plus en plus de ressources en swift....
Ca me gonfle parce que j'ai pas envie de m'y mettre ^^
Je pense qu'il faudra se mettre à Swift mettre quoi qu'il arrive. J'ai assisté une fois à un CocoaHead à Paris ou un participant était prés à s'en couper une si un jour la majorité de dev présents passait à swift. C'est inéluctable, un jour, une nouvelle fonction, un nouvel OS, un nouvel iBidule ne pourra se faire qu'en swift. Ceux qui n'auront pas pris le train en marche galèreront et le gars de CocoaHead ne sera plus qu'un eunuque. Je citerais pas de nom mais je le suis sur Twitter en espérant bientôt voir passer un faire part de naissance avant qu'il ne soit trop tard pour lui^^
Je sais ma réponse est hors sujet mais nous sommes en week-end...
Sinon pour les String en Swift il ne s'agit pas d'un tableau de caractères ll faut faire attention quand on les manipule ou quand on navigue dedans. Je débute aussi en swift et je repasse souvent mes String (swift) en NSString (Cocoa) car NSString à plein de méthode bien pratique.
Tu verras c'est cool de Swifter !