সুইফট - কোন ধরণের ব্যবহার করতে হবে? এনএসএসস্ট্রিং বা স্ট্রিং


109

সুইফ্টের প্রবর্তনের সাথে সাথে আমি আমার মাথাটি নতুন ভাষার দিকে নিয়ে যাওয়ার চেষ্টা করছি

আমি একজন আইওএস বিকাশকারী এবং NSString, NSInteger, NSDictionaryঅ্যাপ্লিকেশনের মতো ধরণের ব্যবহার করব । আমি লক্ষ্য করেছি যে অ্যাপলের "দ্য সুইফ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ" ইবুকটিতে তারা সুইফট প্রকারগুলি ব্যবহার করেString, Int, Dictionary

আমি লক্ষ্য করেছি যে ফাউন্ডেশন ধরণের কিছু ফাংশন সুইফট টাইপগুলিতে না (বা আলাদাভাবে নামযুক্ত) থাকে। যেমন NSStringএকটি lengthসম্পত্তি আছে। তবে আমি সুইফটের জন্য সেরকম একটি খুঁজে পাইনি String

আমি ভাবছি, কোনও আইওএস অ্যাপ্লিকেশনটির জন্য আমার কি এখনও ফাউন্ডেশনের ধরণগুলি ব্যবহার করা উচিত?


3
পছন্দ String। তবে Stringআলফা রিলিজে কার্যকারিতা এখনও খানিকটা সীমাবদ্ধ, তাই NSStringআপাতত আরও ব্যবহৃত হবে। আমরা আশা করি তারা জিএ পর্যন্ত এপিআই ঠিক করবে।
সুলতান

1
এছাড়াও, আপনি countElements(str)আপনার প্রশ্নের সেই নির্দিষ্ট অংশটির উত্তর দিতে কল করতে পারেন ।
নেট কুক

আরও ভাল, আপনি কল করতে পারেন "foo".length" directly in Swift. An implicit cast to NSString` সংকলক দ্বারা আপনার জন্য যোগ করা হয়!
গ্যাব্রিয়েল পেট্রোনেলা

1
@ গ্যাব্রিয়েলপেট্রোনেলা। দৈর্ঘ্য বিশেষ অক্ষরের জন্য সঠিকভাবে কাজ করতে পারে না। যেমন ইমোজি বা চাইনিজ অক্ষর যা 2 বা 3 ইউনিকোড অক্ষর গ্রহণ করে। কাউন্টের উপাদানগুলি সঠিকভাবে ব্যবহার করার পদ্ধতি।
ফগমিস্টার

উত্তর:


98

আপনার যখনই সম্ভব সুইফট নেটিভ প্রকারগুলি ব্যবহার করা উচিত। ভাষা সেগুলি ব্যবহারের জন্য অনুকূলিত করা হয়েছে এবং বেশিরভাগ কার্যকারিতা দেশীয় প্রকার এবং প্রকারের মধ্যে ব্রিজ করা হয় Foundation

যদিও Stringএবং NSStringবেশিরভাগই বিনিময়যোগ্য হয়, অর্থাত্, আপনি প্যারামিটারগুলি Stringগ্রহণ করে NSStringএবং তদ্বিপরীতভাবে এমন পদ্ধতিতে ভেরিয়েবলগুলি পাস করতে পারেন তবে কিছু পদ্ধতি এই মুহুর্তে স্বয়ংক্রিয়ভাবে ব্রিজ হয় না বলে মনে হয়। স্ট্রিংয়ের দৈর্ঘ্য কীভাবে পাবেন সে সম্পর্কে আলোচনার জন্য এই উত্তরটি দেখুন এবং সাবস্ট্রিংগুলি পরীক্ষা করতে ব্যবহার করার বিষয়ে আলোচনার জন্য এই উত্তরটি দেখুনcontainsString() । (অস্বীকৃতি: আমি এই দুটি উত্তরের জন্যই লেখক)

আমি অন্যান্য ডেটা প্রকারগুলি পুরোপুরি অন্বেষণ করি নি, তবে আমি ধরে নিয়েছি যে উপরে বর্ণিত হয়েছে তার কিছু সংস্করণও Array/ NSArray, Dictionary/ NSDictionary, এবং সুইফট এবং বিভিন্ন সংখ্যার ধরণের ক্ষেত্রে সত্য হয়ে যাবে andNSNumber

যখনই আপনার ফাউন্ডেশন ধরণের একটি ব্যবহার করার প্রয়োজন হয়, আপনি সেগুলি স্পষ্টভাবে ভেরিয়েবল / ধ্রুবকগুলি টাইপ করতে ব্যবহার করতে পারেন var str: NSString = "An NSString"বা যেমন bridgeToObjectiveC()একটি সুইফ টাইপের বিদ্যমান ভেরিয়েবল / ধ্রুবক ব্যবহার করতে পারেন str.bridgeToObjectiveC().length। এছাড়াও আপনি একটি কাস্ট করতে পারেন Stringএকটি থেকে NSStringব্যবহার করে str as NSString

যাইহোক, এই কৌশলগুলির স্পষ্টভাবে ফাউন্ডেশন ধরণগুলি ব্যবহার করার জন্য প্রয়োজনীয়তা বা তাদের কয়েকটি অন্তত ভবিষ্যতে অপ্রচলিত হতে পারে, কারণ ভাষা রেফারেন্সে বর্ণিত যা থেকে, String/ NSStringব্রিজ, পুরোপুরি বিরামহীন হওয়া উচিত।

বিষয় সম্পর্কে গভীর আলোচনার জন্য, কোকো এবং উদ্দেশ্য-সি-সহ সুইফট ব্যবহার করে দেখুন: কোকো ডেটা ধরণের সাথে কাজ করা


4
bridgeToObjectiveC()এনএসএসস্ট্রিং এবং সুইফট স্ট্রিংয়ের মধ্যে সংযোগটি উল্লেখ করার জন্য এবং এটি ব্যাখ্যা করার জন্য +1 ।
ক্রিস

2
আরে সিজার, আমি মনে করি আপনার উত্তরটি আপডেট করার ক্ষেত্রে যত্ন নিলে সেতুটিওজেক্টিভসিটিকে অবহেলা করা হবে।
ড্যান বিউলিউ

আমি সুইফট 3 ম্যানুয়ালটিতে লক্ষ্য করেছি যে ফাউন্ডেশনের প্রকারগুলি রেফারেন্স দ্বারা পাস হয়, যখন দেশীয় প্রকারগুলি মান দ্বারা পাস হয় (বা এর মতো কিছু যা আমি এই মুহুর্তে পুরোপুরি বুঝতে পারি না)। আপনি যদি এর উত্তরগুলি নিয়ে এর উত্তরগুলি আপডেট করে আপডেট করতে পারেন তবে দুর্দান্ত হবে।
নাইজেল বি পেক

27

এনএসএসস্ট্রিং: এমন বস্তু তৈরি করে যা গাদা হয়ে থাকে এবং সর্বদা রেফারেন্সের সাহায্যে পাস হয়।

স্ট্রিং: এটি একটি মানের ধরণ যখনই আমরা এটি পাস করি তখন এটির মান দিয়ে যায়। স্ট্রাক্ট এবং এনুমের মতো, স্ট্রিং নিজেই সুইফটে স্ট্রাক্ট।

public struct String {
 // string implementation 
}

তবে পাস করার সময় অনুলিপি তৈরি হয় না। আপনি প্রথমে এটিকে পরিবর্তন করতে গেলে এটি অনুলিপি তৈরি করে।

স্ট্রিংটি স্বয়ংক্রিয়ভাবে এনএসএসস্ট্রিং হিসাবে অবজেক্টিভ-সি-তে ব্রিজ করা হয়েছে। যদি সুইফ্ট স্ট্যান্ডার্ড লাইব্রেরিটি না থাকে তবে এনএসএসস্ট্রিং দ্বারা সংজ্ঞায়িত পদ্ধতিগুলিতে অ্যাক্সেস পেতে আপনার ফাউন্ডেশন কাঠামো আমদানি করতে হবে।

সুইফ্ট স্ট্রিংটি খুব শক্তিশালী এটিতে ইনবিল্ট ফাংশনগুলির আধিক্য রয়েছে।

স্ট্রিংয়ের সূচনা:

var emptyString = ""             // Empty (Mutable)
let anotherString = String()     // empty String immutable    
let a = String(false)           // from boolean: "false"
let d = String(5.999)           //  "    Double "5.99"
let e = String(555)             //  "     Int "555"
// New in Swift 4.2 
let hexString = String(278, radix: 18, uppercase: true) // "F8"

পুনরাবৃত্তি মান থেকে স্ট্রিং তৈরি করুন:

 let repeatingString = String(repeating:"123", count:2) // "123123"

সুইফটে 4 -> স্ট্রিংগুলি অক্ষরের সংগ্রহ:

এখন স্ট্রিং সমস্ত ক্রিয়াকলাপ সম্পাদন করতে সক্ষম যা যে কেউ সংগ্রহের ধরণে সঞ্চালন করতে পারে।

আরও তথ্যের জন্য দয়া করে অ্যাপল ডকুমেন্টগুলি দেখুন।


2
এই উত্তরের আরও বেশি ভোট পাওয়া উচিত। এটি স্ট্রিং এবং এনএসএসস্ট্রিংয়ের মধ্যে মৌলিক পার্থক্য। অন্য কোথাও এগুলি প্রায় বিনিময়যোগ্য
সর্বাধিক

দুর্দান্ত উত্তর। মান বনাম রেফ টাইপ নোট বিশেষত।
spnkr

11

আপনার সেরা বাজি হ'ল সুইফট নেটিভ টাইপ এবং ক্লাস ব্যবহার করা, যেমন কিছু অন্যান্য উল্লেখ করেছেন যে এনএসএসটিংয়ের স্ট্রিংয়ের জন্য টোল ফ্রি অনুবাদ রয়েছে, তবে সেগুলি 100% একই নয়, উদাহরণস্বরূপ নিম্নলিখিতটি নিন

var nsstring: NSString = "\U0001F496"
var string: String = "\U0001F496"

nsstring.length
count(string)

স্ট্রিংয়ে অক্ষরগুলি গণনা করার জন্য আপনাকে পদ্ধতি গণনা () ব্যবহার করতে হবে, এটিও নোট করুন যে nsstring.length 2 প্রদান করে, কারণ এটি ইউটিএফ 16 এর উপর ভিত্তি করে তার দৈর্ঘ্য গণনা করে।

অনুরূপ, হ্যাঁ একই, কোন


7

Stringএবং NSStringবিনিময়যোগ্য হয়, তাই আপনি কোনটি ব্যবহার করেন তা আসলেই গুরুত্বপূর্ণ নয়। আপনি সর্বদা ব্যবহার করে দুজনের মধ্যে কাস্ট করতে পারেন

let s = "hello" as NSString

অথবা এমনকি

let s: NSString  = "hello"

NSIntegerএকটি intবা একটি long(আর্কিটেকচারের উপর নির্ভর করে) এর জন্য কেবল একটি উপনাম , সুতরাং আমি কেবল ব্যবহার করব Int

NSDictionaryDictionaryসম্পূর্ণ আলাদা বাস্তবায়ন হওয়ায় এটি একটি পৃথক বিষয়।

সাধারনত আমি যখনই সম্ভব স্যুইফট প্রকারগুলিতে আটকে থাকি এবং আপনি যখনই bridgeToObjectiveC()সুইফ্ট ক্লাস দ্বারা সরবরাহিত পদ্ধতিটি ব্যবহার করে সর্বদা প্রয়োজনে দুজনের মধ্যে রূপান্তর করতে পারেন ।


সুইফট এর Intআর্কিটেকচারের শব্দের আকারের মতো হতে বইটিতে ডেটা টাইপটি বর্ণিত হয়েছে। NSIntegerআর্কিটেকচারের শব্দের আকারের মতো একই আকার।
ম্যাডডেসনে

6

যেহেতু উদ্দেশ্য সি প্রকারগুলি এখনও গতিশীলভাবে প্রেরণ করা হয়েছে তারা সম্ভবত ধীর হতে চলেছে। আমি বলব আপনি সোফ্ট নেটিভ প্রকারগুলি ব্যবহার করে সেরা পরিবেশিত হবেন যতক্ষণ না আপনার উদ্দেশ্য-সি এপিআইয়ের সাথে ইন্টারঅ্যাক্ট করার দরকার পড়ে


হ্যাঁ ঠিক উত্তর দেয়। এবং ডাব্লুডাব্লুডিসিতে তারা যে গতির উন্নতি সম্পর্কে কথা বলেছিল তা গতিশীলভাবে প্রেরণ পদ্ধতি এবং অবজেক্ট ভেরিয়েবল অ্যাক্সেস এড়ানো অতীতে কর্মক্ষমতা নিয়ে চিন্তিত সবাই স্ট্যাটিক প্রেরণের জন্য সি ++ স্ট্রিং এবং পাত্রে ব্যবহার করতেন।
লোথার

5

আপনি যখনই পারেন সুইফট দেশীয় প্রকারগুলি ব্যবহার করুন। স্ট্রিংয়ের ক্ষেত্রে, তবে NSStringএই জাতীয় পদ্ধতিতে আপনার কাছে "বিজোড়" অ্যাক্সেস রয়েছে :

var greeting = "Hello!"
var len = (greeting as NSString).length

4

সুইফট 4 আপডেট

স্ট্রিংটি দ্রুতগতিতে 4 টি পুনর্বিবেচনা পেয়েছে Now এনএসএসস্ট্রিং আপডেট করা হয়নি এবং এটি অন্য উপায়ে গণনা করছে।

var nsstring: NSString = "👩‍👩‍👧‍👦"
var string: String = "👩‍👩‍👧‍👦"

print(nsstring.length) // 11
print(string.count)    // 1

1
NSStringগ্রাফি ক্লাস্টারগুলির সাথে মোকাবিলা করার জন্য সম্ভবত আপডেট করা হবে না: এটি পুরানো আচরণের উপর নির্ভর করে এমন অনেকগুলি অ্যাপ্লিকেশন ভেঙে ফেলবে। এছাড়াও, NSString.lengthইউটিএফ 16 অক্ষর গণনা করে।
ম্যাডডেইসনে

0

স্ট্রিং একটি কাঠামো

// সুইফ্ট মডিউল এ

পাবলিক স্ট্রিং স্ট্রিং

{

}

এনএসএসস্ট্রিং একটি শ্রেণি

// ফাউন্ডেশন মডিউল এ

ওপেন ক্লাস এনএসএসস্ট্রিং: এনএসবজেক্ট

{

}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.