Ecriture d'une chaîne dans un NSOutputStream dans Swift
Je suis en train d'écrire un String
à un NSOutputStream
en Swift. Écrire des Chaînes de caractères de cette façon avec Objective-C fonctionne généralement en le passant comme NSData
NSData *data = [[NSData alloc] initWithData:[mystring dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
Cela ne fonctionne pas avec swift
var data: NSData = mystring.dataUsingEncoding(NSUTF8StringEncoding)!
outputStream.write(data, maxLength: data.length)
cela donne l'erreur
'NSData" n'est pas convertible 'UnsafePointer'
pour la ligne qui écrit les données dans le flux.
Comment voulez-vous écrire une Chaîne dans une NSOutputStream dans Swift?
source d'informationauteur Lukas | 2014-10-13
Vous devez vous connecter pour publier un commentaire.
Il y a deux problèmes ici. La première, c'est que vous êtes en passant
data
àoutputStream.write()
et pasdata.bytes
(comme vous avez passé[data bytes]
dans votre code Objective-C). Le deuxième problème est quedata.bytes
retourne unUnsafePointer<Void>
maisNSOutputStream.write()
prend unUnsafePointer<UInt8>
. Heureusement,UnsafePointer
a une façon de faire la conversion entre les types:Mettre les choses ensemble de votre code ressembler à quelque chose comme ceci:
Au cours des dernières Swift il devrait être encore plus facile et NSData n'est plus nécessaire.
Les tableaux peuvent être accessibles à des zones tampons de la corriger leur type (voir
withUnsafeBufferPointer
). Je pense que le tableau est nécessaire parce que l'utf8 vue n'est pas réellement instancié comme un ensemble complet, mais juste un point de vue dans la chaîne d'origine.Dans le code de production, vous devez vérifier la valeur de retour de l'écrire dans le flux de sortie et en fonction de votre scénario de vérifier l'absence d'espace avant de l'écrire, mais l'objectif de cette réponse, c'est l'encodage de la Swift de la Chaîne de sorte qu'il puisse être écrit.
Espère que cet exemple permet de sortir. Il écrit une chaîne de caractères pour le répertoire de documents. Notez que outputStream est testé à l'aide Swift 1.1 avec failable initialiseur.
Ce qui concerne