Swift에서 NSData의 문자열을 초기화하는 방법
다음에서 문자열을 초기화하려고 했습니다.NSData
스위프트에서
NSString Cocoa Documentation에서 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)
필요한 구현 코드는 다음과 같습니다.
Swift 3.0의 경우:
var dataString = String(data: fooData, encoding: String.Encoding.utf8)
아니면 그냥
var dataString = String(data: fooData, encoding: .utf8)
이전의 빠른 버전:
Swift 2.0에서:
import Foundation
var dataString = String(data: fooData, encoding: NSUTF8StringEncoding)
Swift 1.0에서:
var dataString = NSString(data: fooData, encoding:NSUTF8StringEncoding)
이것이 당신이 초기화하는 방법입니다.NSString
:
Swift 2.X 이상 버전
let datastring = NSString(data: fooData, encoding: NSUTF8StringEncoding)
Swift 3 이상:
let datastring = NSString(data: fooData, encoding: String.Encoding.utf8.rawValue)
이 문서는 구문을 설명합니다.
스위프트 2.0
Swift 2.0이 실제로 도입된 것으로 보입니다.String(data:encoding:)
가져올 때 문자열 확장자로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)
이 접근 방식의 문제는 정보의 복사본을 새 어레이로 생성하여 바이트 수를 복제한다는 것입니다(구체적으로 다음과 같습니다.encoding size * data.length
)
Swift의 세 번째 버전 이후 다음을 수행할 수 있습니다.
let desiredString = NSString(data: yourData, encoding: String.Encoding.utf8.rawValue)
Sunkas가 조언한 것과 유사합니다.
import Foundation
var string = NSString(data: NSData?, encoding: UInt)
확장자를 기반으로 한 또 다른 답변(Java에서 이것이 그립습니까?):
extension NSData {
func toUtf8() -> String? {
return String(data: self, encoding: NSUTF8StringEncoding)
}
}
그런 다음 사용할 수 있습니다.
let data : NSData = getDataFromEpicServer()
let string : String? = data.toUtf8()
문자열은 선택적이며 이니셜입니다.NSData
Utf8로 변환할 수 없습니다.
목표 - 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
언급URL : https://stackoverflow.com/questions/24023253/how-to-initialise-a-string-from-nsdata-in-swift
'programing' 카테고리의 다른 글
자르기 명령을 사용하여 공백을 구분 기호로 사용 (0) | 2023.04.26 |
---|---|
그리드 칼럼의 폭/높이를 설정할 때 '자동'과 '*'의 차이점은 무엇입니까? (0) | 2023.04.26 |
Azure Portal을 사용하여 Azure App Service 요금제의 이름을 변경할 수 있습니까? (0) | 2023.04.26 |
.sshrc at ssh 로그인 (0) | 2023.04.26 |
PowerShell에서 파일에 함수를 정의하고 PowerShell 명령줄에서 호출하려면 어떻게 해야 합니까? (0) | 2023.04.21 |