Swift의 NSString에서 NSData 생성


174

궁극적으로 NSMutableURLRequestwith로 시도하고 HTTPBody있지만 문자열 데이터 (에서 오는 UITextField)를 사용 가능한 NSData객체 로 가져올 수 없습니다 .

다른 방법으로가는이 방법을 보았습니다.

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

그러나 유스 케이스에 대한 문서를 찾을 수없는 것 같습니다. 필요한 경우 문자열을 다른 유형으로 넣을 수는 있지만 NSDataSwift 를 사용 하기위한 초기화 옵션은 내가 원하는 것 같습니다.

답변:


359

스위프트 3에서

let data = string.data(using: .utf8)

Swift 2에서 (또는 이미 NSString인스턴스 가있는 경우)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

스위프트 1에서 (또는 당신이 신속한 경우 String) :

let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)

또한 참고 dataOptional<NSData>(변환이 실패 할 수 있기 때문에), 당신은 예를 들어, 그것을 사용하기 전에 랩을 해제해야합니다 그래서 :

if let d = data {
    println(d)
}

스위프트는 NSData 타입을 유추 할 수 있습니까?
Nicolas Manzini 2016 년

@NicolasManzini는 다른 유형과 마찬가지로 가능합니다.
Gabriele Petronella 2014 년

2
@macdonjo 네,이 API는 시간이 지남에 따라 변화하고 지금은 반환 Optional<NSData>사용하기 전에 포장을 벗긴해야하는을,
가브리엘 Petronella

3
Swift2에서는 자동으로 브리지되므로 "as"캐스트를 사용할 필요가 없습니다
Jacky

1
UTF-8로의 변환은 없습니다 실패 따라서 옵션이 정말 필요하지 바인딩, 당신이 강제로 포장을 벗긴 수 있습니다 여기에.
Martin R

33

스위프트 4 & 3

Swift 3에서 Data객체에서 String객체 생성 이 변경되었습니다. 이제 올바른 버전은 다음과 같습니다.

let data = "any string".data(using: .utf8)

감사. 이것은 스위프트 3에서 완벽하게 작동했습니다. 입력 = "문자열 테스트"let xdata = input.data (사용 : String.Encoding.utf8)
raddevus

1
왜 String (data : data !, encoding : .nonLossyASCII)이 nil이 될 수 있습니까?
Happiehappie

4

여기에 매우 간단한 방법

let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

4

스위프트 4

let data = myStringVariable.data(using: String.Encoding.utf8.rawValue)

NSStringSwift 에서는 사용하지 마십시오 .
vadian

3
// Checking the format
var urlString: NSString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)

// Convert your data and set your request's HTTPBody property
var stringData: NSString = NSString(string: "jsonRequest=\(urlString)")

var requestBodyData: NSData = stringData.dataUsingEncoding(NSUTF8StringEncoding)!

2

선택적 데이터를 만들지 않으려면 사용하는 것이 좋습니다.

let key = "1234567"
let keyData = Data(key.utf8)

1
Swift 3 이상에서는 이것이 가장 효율적인 방법입니다.
vadian

2

스위프트 4.2

let data = yourString.data(using: .utf8, allowLossyConversion: true)


0

문자열을 데이터로 변환

extension String {
    func toData() -> Data {
        return Data(self.utf8)
    }
}

데이터를 문자열로 변환

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.