সুইফটে এনএসডিটা থেকে স্ট্রিং কীভাবে শুরু করবেন


173

আমি NSDataসুইফট থেকে একটি স্ট্রিং সূচনা করার চেষ্টা করা হয়েছে ।

ইন NSString কোকো ডকুমেন্টেশন অ্যাপল বলছে এই ব্যবহার করতে হবে:

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

তবে অ্যাপল ব্যবহারের জন্য বা কোথায় রাখার জন্য কোনও উদাহরণ অন্তর্ভুক্ত করেনি init

আমি নিম্নলিখিত কোডটি উদ্দেশ্য-সি থেকে সুইফটে রূপান্তর করার চেষ্টা করছি to

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

আমি নিম্নলিখিতগুলির মতো অনেকগুলি সম্ভাব্য বাক্য গঠন চেষ্টা করেছি (অবশ্যই এটি কার্যকর হয়নি):

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

উত্তর:


224

এভাবে আপনার সূচনা করা উচিত NSString:

সুইফট ২. এক্স বা তার বেশি পুরানো

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)
ইয়াস টি।

14
এটি কি NSDataসরাসরি সুইফটে Stringপরিবর্তিত হওয়া সম্ভব (পরিবর্তে একটি NSString)?
ma11hew28

3
টুইটার স্ট্রিং
এগুলি

11
@ ম্যাটডিপিপাস্কোলে উপরোক্ত জোর কাস্ট উপেক্ষা করুন; Stringএটি একটি NSString... এই সমস্ত হওয়া উচিত:var datastring = String(data: someData, encoding: NSUTF8StringEncoding)
জে রেমন্ড

278

এটি প্রয়োজনীয় প্রয়োগকৃত কোড:

সুইফটে 3.0:

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

বা শুধু

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

পুরানো দ্রুততম সংস্করণ:

সুইফট ২.০ এ:

import Foundation

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

সুইফটে 1.0:

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

সুইফট 2 এর এটি করার একটি আলাদা পদ্ধতি রয়েছে
Departamento বি

3
এখনই একটি সুইফট ২.০ সংস্করণ যুক্ত হয়েছে
সুনকাস

আপনি সুইফট 3.0.০ উপায়টি জানবেন? error: use of unresolved identifier 'NSUTF8StringEncoding'
গ্লেন 'দেবালিয়াস'

2
পাশাপাশি একটি সুইফট 3.0 সংস্করণ যুক্ত করা হয়েছে। অভিশাপ, অ্যাপল পছন্দ মত জিনিস!
সুনকাস

1
আপনাকে সুইফ্টের একটি নির্দিষ্ট সংস্করণের বিরুদ্ধে সংকলন করতে হবে, সুতরাং আপনার কোডগুলি সমস্ত 2.x বা 3.x এর বিপরীতে লেখা হবে। এছাড়াও, 3.0 সংস্করণ দিয়ে নোট করুন যা আপনি এটি ব্যবহার করে সংক্ষিপ্ত করতে পারেন var dataString = String(data: fooData, encoding: .utf8)
ruttopia

15

সুইফট ২.০

দেখে মনে হচ্ছে String(data:encoding:)আপনি আমদানি করার সময় সুইফট ২.০ আসলে স্ট্রিং এক্সটেনশন হিসাবে প্রবর্তন করেছেFoundation । আমি এখানে এমন কোনও জায়গা পাইনি যেখানে এটি নথিভুক্ত করা হয়েছে, অদ্ভুতভাবে যথেষ্ট।

(প্রাক সুইফট ২.০) হালকা এক্সটেনশন

এখানে ব্যবহার না করে একটি অনুলিপি-পেস্টযোগ্য সামান্য এক্সটেনশান 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:)


4

সুইফটের তৃতীয় সংস্করণ যেহেতু আপনি নিম্নলিখিতটি করতে পারেন:

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

সুনকাস যা পরামর্শ দিয়েছিল তার সিমিলার।



2

এক্সটেনশানগুলির উপর ভিত্তি করে আর একটি উত্তর (ছেলে আমি জাভায় এটি মিস করি):

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

তারপরে আপনি এটি ব্যবহার করতে পারেন:

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

নোট করুন যে স্ট্রিংটি is NSDataচ্ছিক , প্রাথমিকটি ইউটিএফ 8-এ পরিবর্তিত হতে পারে।


0

উদ্দেশ্য গ

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.