সুইফট ২.০
দেখে মনে হচ্ছে 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
:)