J’ai essayé d’initialiser une chaîne de NSData
dans Swift.
Dans la documentation NSSsortingng Cocoa, Apple dit que vous devez utiliser ceci:
init(data data: NSData!, encoding encoding: UInt)
Cependant, Apple n’a pas inclus d’exemple d’utilisation ou de lieu d’ init
.
J’essaie de convertir le code suivant d’Objective-C en Swift
NSSsortingng *ssortingng; ssortingng = [[NSSsortingng alloc] initWithData: data encoding: NSUTF8SsortingngEncoding];
J’ai essayé beaucoup de syntaxes possibles telles que les suivantes (bien sûr, cela ne fonctionnait pas):
var ssortingng:NSSsortingng! ssortingng = init(data: fooData,encoding: NSUTF8SsortingngEncoding)
Voici comment vous devez initialiser le NSSsortingng
:
Swift 2.X ou plus
let datassortingng = NSSsortingng(data: fooData, encoding: NSUTF8SsortingngEncoding)
Swift 3 ou plus récent:
let datassortingng = NSSsortingng(data: fooData, encoding: Ssortingng.Encoding.utf8.rawValue)
Ce document explique la syntaxe.
C’est le code implémenté nécessaire:
var dataSsortingng = Ssortingng(data: fooData, encoding: Ssortingng.Encoding.utf8)
ou juste
var dataSsortingng = Ssortingng(data: fooData, encoding: .utf8)
Version rapide plus ancienne:
dans Swift 2.0:
import Foundation var dataSsortingng = Ssortingng(data: fooData, encoding: NSUTF8SsortingngEncoding)
dans Swift 1.0:
var dataSsortingng = NSSsortingng(data: fooData, encoding:NSUTF8SsortingngEncoding)
Il semble que Swift 2.0 ait réellement introduit Ssortingng(data:encoding:)
tant qu’extension Ssortingng lorsque vous importez Foundation
. Je n’ai trouvé aucun endroit où cela est documenté, assez bizarrement.
Voici une petite extension pouvant être copiée sans utiliser NSSsortingng
, coupons le middle-man.
import Foundation extension NSData { var byteBuffer : UnsafeBufferPointer { get { return UnsafeBufferPointer (start: UnsafeMutablePointer (self.bytes), count: self.length) }} } extension Ssortingng { init?(data : NSData, encoding : NSSsortingngEncoding) { self.init(bytes: data.byteBuffer, encoding: encoding) } } // Playground test let original = "Nymphs blitz quick vex dwarf jog" let encoding = NSASCIISsortingngEncoding if let data = original.dataUsingEncoding(encoding) { Ssortingng(data: data, encoding: encoding) }
Cela vous donne également access à data.byteBuffer
qui est un type de séquence, donc toutes ces opérations sympas que vous pouvez faire avec les séquences fonctionnent aussi, comme faire une reduce { $0 &+ $1 }
pour une sum de contrôle.
Dans ma précédente édition, j’ai utilisé cette méthode:
var buffer = Array(count: data.length, repeatedValue: 0x00) data.getBytes(&buffer, length: data.length) self.init(bytes: buffer, encoding: encoding)
Le problème avec cette approche, c’est que je crée une copie des informations dans un nouveau tableau. Je duplique donc la quantité d’octets (en particulier: la encoding size * data.length
)
Depuis la troisième version de Swift, vous pouvez effectuer les opérations suivantes:
let desiredSsortingng = NSSsortingng(data: yourData, encoding: Ssortingng.Encoding.utf8.rawValue)
Simialr à ce que Sunkas a conseillé.
import Foundation var ssortingng = NSSsortingng(data: NSData?, encoding: UInt)
Une autre réponse basée sur les extensions (ça me manque en Java):
extension NSData { func toUtf8() -> Ssortingng? { return Ssortingng(data: self, encoding: NSUTF8SsortingngEncoding) } }
Ensuite, vous pouvez l’utiliser:
let data : NSData = getDataFromEpicServer() let ssortingng : Ssortingng? = data.toUtf8()
Notez que la chaîne est facultative, le NSData
initial peut être non convertible à Utf8.
Objectif c
NSData *mySsortingngData = [@"My Ssortingng" dataUsingEncoding:NSUTF8SsortingngEncoding]; NSSsortingng *mySsortingngFromData = [[NSSsortingng alloc] initWithData:mySsortingngData encoding:NSUTF8SsortingngEncoding]; NSLog(@"My ssortingng value: %@",mySsortingngFromData);
Rapide
//This your data containing the ssortingng let mySsortingngData = "My Ssortingng".dataUsingEncoding(NSUTF8SsortingngEncoding) //Use this method to convert the data into Ssortingng let mySsortingngFromData = Ssortingng(data:mySsortingngData!, encoding: NSUTF8SsortingngEncoding) print("My ssortingng value:" + mySsortingngFromData!)
http://objectivec2swift.blogspot.in/2016/03/coverting-nsdata-to-nsssortingng-or-convert.html