Swift에서 NSData에서 문자열을 초기화하는 방법


173

NSDataSwift 에서 문자열을 초기화하려고했습니다 .

있는 NSString 코코아 문서 애플은이를 사용할 필요가 말하고있다 :

 init(data data: NSData!, encoding encoding: UInt)

그러나 애플은 사용법이나 어디에 넣을 지에 대한 예제를 포함하지 않았다 init.

Objective-C에서 Swift로 다음 코드를 변환하려고합니다.

NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

다음과 같은 많은 구문을 시도해 보았습니다 (물론 작동하지 않습니다).

var string:NSString!
string = init(data: fooData,encoding: NSUTF8StringEncoding)

답변:


224

이것이 다음을 초기화하는 방법입니다 NSString.

스위프트 2.X 이상

let datastring = NSString(data: fooData, encoding: NSUTF8StringEncoding)

스위프트 3 이상 :

let datastring = NSString(data: fooData, encoding: String.Encoding.utf8.rawValue)

이 문서 는 구문을 설명합니다.


2
그런 식으로 "데이터"와 "인코딩"을 반복 할 필요는 없습니다.
jbg

19
되어야한다let datastring = NSString(data: fooData, encoding:NSUTF8StringEncoding)
Yas T.

14
을 대신 NSData하여 Swift 로 직접 변환 할 수 있습니까? StringNSString
ma11hew28

3
@MattDiPasquale var swiftString = NSString (data : NSData !, encoding : UInt) as! 그게
긴 타마

11
@MattDiPasquale 위의 강제 전송은 무시하십시오. String입니다 NSString...이 모두 있어야한다 :var datastring = String(data: someData, encoding: NSUTF8StringEncoding)
JRaymond

278

이것은 필요한 구현 코드입니다.

스위프트 3.0에서 :

var dataString = String(data: fooData, encoding: String.Encoding.utf8)

아니면 그냥

var dataString = String(data: fooData, encoding: .utf8)

이전 스위프트 버전 :

스위프트 2.0에서 :

import Foundation

var dataString = String(data: fooData, encoding: NSUTF8StringEncoding)

스위프트 1.0에서 :

var dataString = NSString(data: fooData, encoding:NSUTF8StringEncoding)

스위프트 2는 다른 방식으로이 작업을 수행합니다
Departamento B

3
Swift 2.0 버전도 추가
Sunkas

Swift 3.0 방식을 알고 싶으십니까? error: use of unresolved identifier 'NSUTF8StringEncoding'
Glenn 'devalias'1

2
Swift 3.0 버전도 추가되었습니다. 젠장, 애플은 물건을 바꾸는 것을 좋아한다!
Sunkas

1
특정 버전의 Swift에 대해 컴파일해야하므로 코드가 모두 2.x 또는 3.x에 대해 작성됩니다. 또한 3.0 버전에서는을 사용하여 단축 할 수 있습니다 var dataString = String(data: fooData, encoding: .utf8).
ruttopia

15

스위프트 2.0

Swift 2.0은 실제로 String(data:encoding:)가져올 때 String 확장으로 도입 한 것 같습니다 Foundation. 나는 이것이 이상하게 문서화 된 곳을 찾지 못했습니다.

(pre Swift 2.0) 경량 확장

를 사용하지 않고 복사하여 붙여 넣을 수있는 작은 확장명이 NSString있습니다. 중간자를 잘라 봅시다.

import Foundation

extension NSData
{
    var byteBuffer : UnsafeBufferPointer<UInt8> { get { return UnsafeBufferPointer<UInt8>(start: UnsafeMutablePointer<UInt8>(self.bytes), count: self.length) }}
}

extension String
{
    init?(data : NSData, encoding : NSStringEncoding)
    {
        self.init(bytes: data.byteBuffer, encoding: encoding)
    }
}

// Playground test
let original = "Nymphs blitz quick vex dwarf jog"
let encoding = NSASCIIStringEncoding

if let data = original.dataUsingEncoding(encoding)
{
    String(data: data, encoding: encoding)
}

또한 data.byteBuffer시퀀스 유형에 액세스 할 수 reduce { $0 &+ $1 }있으므로 체크섬에 대한 작업과 같이 시퀀스로 수행 할 수있는 모든 멋진 작업도 작동 합니다.

노트

이전 편집 에서이 방법을 사용했습니다.

var buffer = Array<UInt8>(count: data.length, repeatedValue: 0x00)
data.getBytes(&buffer, length: data.length)
self.init(bytes: buffer, encoding: encoding)

이 방식의 문제점은 I 따라서, I 바이트의 양을 복제하고있어, 새로운 배열 정보의 사본을 만들 야한다는 것이다 (즉 : encoding size * data.length)


4

Swift의 세 번째 버전부터 다음을 수행 할 수 있습니다.

let desiredString = NSString(data: yourData, encoding: String.Encoding.utf8.rawValue)

Sunkas가 조언 한 것과 유사합니다.


3
import Foundation
var string = NSString(data: NSData?, encoding: UInt)

2

확장을 기반으로 한 또 다른 답변 (Java에서 이것을 놓칠 수 있습니까) :

extension NSData {
    func toUtf8() -> String? {
        return String(data: self, encoding: NSUTF8StringEncoding)
    }
}

그런 다음 사용할 수 있습니다.

let data : NSData = getDataFromEpicServer()
let string : String? = data.toUtf8() 

문자열은 선택 사항이며, 이니셜 NSData은 Utf8로 변환 할 수 없습니다.


0

목표-C

NSData *myStringData = [@"My String" dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *myStringFromData = [[NSString alloc] initWithData:myStringData encoding:NSUTF8StringEncoding];
NSLog(@"My string value: %@",myStringFromData);

빠른

//This your data containing the string
   let myStringData = "My String".dataUsingEncoding(NSUTF8StringEncoding)

   //Use this method to convert the data into String
   let myStringFromData =  String(data:myStringData!, encoding: NSUTF8StringEncoding)

   print("My string value:" + myStringFromData!)

http://objectivec2swift.blogspot.in/2016/03/coverting-nsdata-to-nsstring-or-convert.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.