সুইফটে অপরিবর্তনীয় / পরিবর্তনীয় সংগ্রহ


88

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

আমি নীচের উদ্দেশ্যে সোফ্টের সমতুল্যগুলি দেখতে ওপজেক্টিভ-সি তে দেখতে চাই

অপরিবর্তনীয় অ্যারে

NSArray *imArray = [[NSArray alloc]initWithObjects:@"First",@"Second",@"Third",nil];

পরিবর্তনীয় অ্যারে

NSMutableArray *mArray = [[NSMutableArray alloc]initWithObjects:@"First",@"Second",@"Third",nil];
[mArray addObject:@"Fourth"];

অপরিবর্তনীয় অভিধান

NSDictionary *imDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil];

পরিবর্তনীয় অভিধান

NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil];
[mDictionary setObject:@"Value3" forKey:@"Key3"];

উত্তর:


115

অ্যারে

অপরিবর্তনযোগ্য অ্যারে তৈরি করুন

প্রথম উপায়:

let array = NSArray(array: ["First","Second","Third"])

দ্বিতীয় উপায়:

let array = ["First","Second","Third"]

পরিবর্তনীয় অ্যারে তৈরি করুন

var array = ["First","Second","Third"]

অ্যারেতে বস্তু যুক্ত করুন

array.append("Forth")


শব্দকোষ

অপরিবর্তনীয় অভিধান তৈরি করুন

let dictionary = ["Item 1": "description", "Item 2": "description"]

পরিবর্তনীয় অভিধান তৈরি করুন

var dictionary = ["Item 1": "description", "Item 2": "description"]

অভিধানে নতুন জুড়ুন

dictionary["Item 3"] = "description"

অ্যাপল বিকাশকারী সম্পর্কে আরও তথ্য


12
"স্থির দৈর্ঘ্য" অ্যারে আরও সুনির্দিষ্ট হবে। এটি পরিবর্তনযোগ্য নয়।
সুলতান

4
অপরিবর্তনীয় Dictionaryসত্যিকারের অপরিবর্তনীয় (অ্যারের বিপরীতে)
ব্রায়ান চেন

@ ব্রায়ানচেন ওহ .. ধন্যবাদ!
নিকেল

@BryanChen হাঁ, আমি অপসারণ করতে ভুলে গেছি var
নিকেল

4
হা. এই প্রশ্ন এবং এর উত্তরের অ্যারেগুলির অনিবার্যতা সম্পর্কে আরও তথ্য ।
ম্যাট গিবসন

31

ওবিজেক্টিভ NSArray-সি-তে অন্য সংগ্রহের ক্লাসের পরিবর্তে সুইফ্টের কোনও ড্রপ নেই ।

অ্যারে এবং অভিধানের ক্লাস রয়েছে, তবে এটি অবশ্যই লক্ষ্য করা উচিত যে এগুলি "মান" প্রকারের সাথে তুলনা করা হয়, এনএসআরারি এবং এনএসডি অভিধানের তুলনায় যা "অবজেক্ট" প্রকারের।

পার্থক্যটি সূক্ষ্ম তবে প্রান্তের কেস বাগগুলি এড়াতে খুব গুরুত্বপূর্ণ হতে পারে।

দ্রুত পদক্ষেপে, আপনি এটির সাথে একটি "অপরিবর্তনীয়" অ্যারে তৈরি করুন:

let hello = ["a", "b", "c"]

এবং একটি "পরিবর্তনযোগ্য" অ্যারে:

var hello = ["a", "b", "c"]

মিউটেটেবল অ্যারেগুলি ঠিক এইভাবে সংশোধন করা যেতে পারে NSMutableArray:

var myArray = ["a", "b", "c"]

myArray.append("d") // ["a", "b", "c", "d"]

তবে আপনি কোনও ফাংশনে একটি পরিবর্তনীয় অ্যারে পাস করতে পারবেন না:

var myArray = ["a", "b", "c"]

func addToArray(myArray: [String]) {
  myArray.append("d") // compile error
}

তবে উপরের কোডটি একটি এনএস পরিবর্তনযোগ্যআরেয়ের সাথে কাজ করে:

var myArray = ["a", "b", "c"] as NSMutableArray

func addToArray(myArray: NSMutableArray) {
  myArray.addObject("d")
}

addToArray(myArray)

myArray // ["a", "b", "c", "d"]

NSMutableArrayকোনও inoutপদ্ধতি প্যারামিটার ব্যবহার করে আপনি এর আচরণ অর্জন করতে পারেন :

var myArray = ["a", "b", "c"]

func addToArray(inout myArray: [String]) {
  myArray.append("d")
}

addToArray(&myArray)

myArray // ["a", "b", "c", "d"]

বর্তমান সুইফ্ট আচরণটি প্রতিফলিত করতে 2015-08-10 এই উত্তরটি পুনরায় লিখেছেন।


4
এটি সম্ভবত এখন পরিবর্তন করা হয়েছে। একটি ধ্রুবক অ্যারে এখন সত্যই পরিবর্তনযোগ্য, এবং একটি পরিবর্তনশীল অ্যারে এখন সত্যই পরিবর্তনযোগ্য। এগুলি মান হিসাবে পাস করা হয় , সুতরাং অন্য ভেরিয়েবলের কাছে বরাদ্দ করা বা ফাংশনগুলির মধ্যে পাস করার সময় সেগুলি অনুলিপি করা হবে। তবে, এর পরিবর্তন বা অপরিবর্তনীয়তার কোনও সম্পর্ক নেই।
বালথাজার

আমি আমার উত্তরে যেমন উল্লেখ করেছি, মান হিসাবে পাস করা হ'ল পরিবর্তনের / অপরিবর্তনীয়তার সাথে প্রাসঙ্গিক যেহেতু আপনি কেবল তখনই যত্নশীল হন যখন অন্য কোডে অ্যারে পাস করার সময় (যা এটি পরিবর্তন করতে পারে)।
অভি বেকার্ট

তবে আপনি যদি সম্পত্তি হিসাবে অ্যারে অ্যাক্সেস করেন তবে আপনি এটি অন্য কোনও অবজেক্ট থেকে এখনও পরিবর্তন করতে পারেন। অপরিবর্তনীয় অ্যারেগুলির একটি সুবিধা হ'ল আপনি যদি অন্য বস্তুটি আসলটি পরিবর্তন করতে পারেন কিনা তা ভেবেই আপনি নিরাপদে এটি অন্য কোনও বস্তুর কাছে পৌঁছে দিতে পারেন। বস্তুগুলিকে মান হিসাবে পাস করার পরে এই উদ্বেগের আর অস্তিত্ব নেই। সুতরাং, বিভিন্ন শব্দার্থবিজ্ঞানের বিভিন্ন কোডিং অনুশীলন প্রয়োজন। সম্পাদনা: আমি এখন দেখছি আপনি পোস্টটি বানান করেছেন, তাই আমরা সম্মত। আমি সম্মত হই যে পার্থক্যগুলি সম্পর্কে সচেতন হওয়া জরুরী। পরিবর্তনীয় সংগ্রহের ব্যবহার।
বালথাজার

6

সুইফটে একটি Arrayএবং এক Dictionaryপ্রকার রয়েছে। পরিবর্তনটি নির্ভর করে আপনি কীভাবে এটি নির্মাণ করবেন তার উপর:

var mutableArray = [1,2,3]
let immutableArray = [1,2,3]

উদাহরণস্বরূপ, আপনি যদি কোনও ভেরিয়েবলের জন্য একটি অ্যাসাইনমেন্ট তৈরি করেন তবে তা পরিবর্তনযোগ্য, আপনি যদি ধ্রুবককে একটি অ্যাসাইনমেন্ট তৈরি করেন তবে তা হয় না।

সতর্কতা: অপরিবর্তনীয় অ্যারেগুলি পুরোপুরি পরিবর্তনযোগ্য নয়! আপনি এখনও তাদের সামগ্রীর দৈর্ঘ্য নয়, তাদের বিষয়বস্তু পরিবর্তন করতে পারেন!


4
এফওয়াইআই: আসন্ন বিটাতে অ্যারের আচরণ পরিবর্তন হচ্ছে; আমি মনে করি সকলেই সেই সম্পর্কে
লিখেছেন

@ এক্সেনাডু সূত্র? এই বেটাতে ইটিএ?
এনালগ ফাইল

দুঃখিত, কোন উত্স। এটি সংকলক দলের অন্যতম সদস্যের সাথে আলোচনা থেকে এসেছে। তিনি আরও বলেছিলেন, বিটা 2 মূলত কেবল দু'টি বাগ ফিক্সগুলিতে চেক করা ছিল এবং ডাব্লুডাব্লুডিসি পরবর্তী প্রতিক্রিয়া সম্পর্কিত কোনও কিছুই নেই।
রাশিবিশপ

5

কেবল আপনার (কোনও) অবজেক্ট বা এর সাথে ভেরিয়েবল ঘোষণা করুন

'let' key word -> for "constan/Immutable" array, dictionary, variable, object..etc.

এবং

'var' key word -> for "Mutable" array, dictionary, variable, object..etc. 

আরও গভীর তথ্যের জন্য

" একটি পরিবর্তনশীল করতে একটি ধ্রুবক এবং ভার তৈরি করতে লেট ব্যবহার করুন । সংকলনের সময় ধ্রুবকের মানটি জানা দরকার না, তবে আপনাকে অবশ্যই এটির মান অবশ্যই একবার নির্ধারণ করতে হবে। এর অর্থ আপনি একবারে নির্ধারিত একটি মানটির জন্য ধ্রুবক ব্যবহার করতে পারেন তবে অনেক জায়গায় ব্যবহার করুন।

var myVariable = 42
myVariable = 50
let myConstant = 42

"দ্য সুইফ্ট প্রোগ্রামিং ভাষা" পড়ুন।


ঠিক আছে, অ্যারের ক্ষেত্রে এটি প্রত্যাশার মতো কাজ করে না। stackoverflow.com/a/24319712/623710
macshome

3

আপনি যদি Array(সুইফট) এর সাথে কাজ করতে চান তবে আপনি NSArrayএকটি সাধারণ ব্রিজ ফাংশন ব্যবহার করতে পারেন। উদাহরণ:

var arr1 : Array = []

arr1.bridgeToObjectiveC().count

এটি একই জন্য কাজ করে let


0

অ্যাপলের নিজস্ব ডক্স থেকে:

সংগ্রহের পরিবর্তন

আপনি যদি একটি অ্যারে, একটি সেট বা অভিধান তৈরি করেন এবং এটিকে ভেরিয়েবলের জন্য বরাদ্দ করেন তবে যে সংগ্রহটি তৈরি করা হবে তা পরিবর্তনযোগ্য হবে। এর অর্থ হল যে আপনি সংগ্রহটি আইটেম যুক্ত করে, অপসারণ করে বা পরিবর্তন করে সংগ্রহ তৈরি করার পরে এটি পরিবর্তন করতে (বা রূপান্তর করতে পারেন)। বিপরীতভাবে, আপনি যদি কোনও ধ্রুবককে একটি অ্যারে, একটি সেট বা অভিধান নির্ধারণ করেন তবে সেই সংগ্রহটি অপরিবর্তনীয় এবং এর আকার এবং বিষয়বস্তু পরিবর্তন করা যায় না।

https://developer.apple.com/library/ios/docamentation/Swift/Concepual/Swift_Programming_Language/ Colલેક્Types.html#//apple_ref/doc/uid/TP40014097-CH8-ID105

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


0

[অপরিবর্তনীয় এবং অপরিবর্তনীয়]

সুইফটের অ্যারে নিঃশব্দ করা যায়

[চলুন বনাম ভার, মান বনাম রেফারেন্স প্রকার]

অপরিবর্তনীয় সংগ্রহ [সম্পর্কে] - এটি একটি সংগ্রহ কাঠামো যার পরিবর্তন করা যায় না। এর অর্থ হ'ল আপনি সৃষ্টির পরে যোগ করতে, অপসারণ করতে, পরিবর্তন করতে পারবেন না

let + struct(যেমন Array, Set, Dictionary) আরও উপযুক্ত অপরিবর্তনীয় হতে হয়

কিছু শ্রেণি রয়েছে (উদাঃ NSArray) যা অভ্যন্তরীণ অবস্থা পরিবর্তনের জন্য কোনও ইন্টারফেস সরবরাহ করে না

কিন্তু

class A {
    var value = "a"
}

func testMutability() {
    //given
    let a = A()
    
    let immutableArr1 = NSArray(array: [a])
    let immutableArr2 = [a]
    
    //when
    a.value = "aa"
    
    //then
    XCTAssertEqual("aa", (immutableArr1[0] as! A).value)
    XCTAssertEqual("aa", immutableArr2[0].value)
}   

এটি বরং unmodifiableঅ্যারে হয়

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