Я пытался инициализировать строку из NSData
в Swift.
В документации NSString Cocoa Apple говорит, что вы должны использовать это:
init(data data: NSData!, encoding encoding: UInt)
Однако Apple не включила ни одного примера для использования или где поставить init
.
Я пытаюсь преобразовать следующий код из Objective-C в Swift
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
Я пробовал много возможных синтаксисов, таких как следующие (конечно, это не сработало):
var string:NSString!
string = init(data: fooData,encoding: NSUTF8StringEncoding)
let datastring = NSString(data: fooData, encoding:NSUTF8StringEncoding)
NSData
прямо в SwiftString
(вместоNSString
)?String
этоNSString
... все это должно быть:var datastring = String(data: someData, encoding: NSUTF8StringEncoding)
Это реализованный код, необходимый:
в Swift 3.0:
или просто
Более старая версия swift:
в Swift 2.0:
в Swift 1.0:
источник
error: use of unresolved identifier 'NSUTF8StringEncoding'
var dataString = String(data: fooData, encoding: .utf8)
.Swift 2.0
Кажется, что Swift 2.0 фактически представил
String(data:encoding:)
расширение как String при импортеFoundation
. Я не нашел ни одного места, где это задокументировано, как ни странно.(до Swift 2.0) Легкое расширение
Вот небольшое копируемое расширение без использования
NSString
, давайте отрежем посредника.Это также дает вам доступ к
data.byteBuffer
типу последовательности, поэтому все те классные операции, которые вы можете выполнять с последовательностями, также работают, как, например, выполнениеreduce { $0 &+ $1 }
контрольной суммы.Ноты
В моем предыдущем редактировании я использовал этот метод:
Проблема с этим подходом является то , что я создаю копию информации в новый массив, таким образом, я дублируя количество байт ( в частности:
encoding size * data.length
)источник
Начиная с третьей версии Swift вы можете сделать следующее:
simialr к тому, что посоветовал Сункас.
источник
источник
Другой ответ, основанный на расширениях (мальчик, я скучаю по этому на Java):
Тогда вы можете использовать это:
Обратите внимание, что строка является необязательной, начальная
NSData
может быть необратимой для Utf8.источник
Цель - С
стриж
http://objectivec2swift.blogspot.in/2016/03/coverting-nsdata-to-nsstring-or-convert.html
источник