টাইপ সুরক্ষায় সুইফট একটি উচ্চ প্রিমিয়াম রাখে। পুরো সুইফট ভাষাটি সুরক্ষার কথা মাথায় রেখে তৈরি করা হয়েছিল। এটি সুইফটের অন্যতম বৈশিষ্ট্য এবং এটি আপনাকে খোলার বাহুতে স্বাগত জানানো উচিত। এটি পরিষ্কার, পঠনযোগ্য কোডের বিকাশে সহায়তা করবে এবং আপনার অ্যাপ্লিকেশনটিকে ক্রাশ থেকে রক্ষা করতে সহায়তা করবে।
সুইফটে সমস্ত বিকল্প ?
প্রতীক দিয়ে চিহ্নিত করা হয়েছে। সেটিং দ্বারা ?
টাইপ যার মাধ্যমে আপনি যেমন ঐচ্ছিক আপনি মূলত হয় প্রকাশক করছে নামের পরে ভোটদান টাইপ হিসাবে এই না যা আগে ?
, কিন্তু এর পরিবর্তে যেমন ঐচ্ছিক প্রকার।
নোট: একটি পরিবর্তনশীল বা টাইপ Int
হয় না হিসাবে একই Int?
। এগুলি দুটি ভিন্ন ধরণের যা একে অপরের উপর পরিচালিত হতে পারে না।
Ptionচ্ছিক ব্যবহার
var myString: String?
myString = "foobar"
এর অর্থ এই নয় যে আপনি কোনও ধরণের সাথে কাজ করছেন String
। এর অর্থ হ'ল আপনি এক ধরণের String?
(স্ট্রিং ptionচ্ছিক বা ptionচ্ছিক স্ট্রিং) সাথে কাজ করছেন। আসলে, আপনি যখনই চেষ্টা করবেন
print(myString)
রানটাইমে, ডিবাগ কনসোলটি মুদ্রণ করবে Optional("foobar")
। " Optional()
" অংশটি ইঙ্গিত করে যে এই চলকটির রানটাইমের সময় কোনও মান থাকতে পারে বা নাও থাকতে পারে, তবে ঠিক এখনই "ফুবার" স্ট্রিংটি রয়েছে। Optional()
"চ্ছিক মানটিকে "মোড়কানো" বলা না করা অবধি এই " " ইঙ্গিতটি থাকবে।
একটি alচ্ছিক মোড়ক মানে আপনি এখন সেই ধরণের অ- alচ্ছিক হিসাবে কাস্ট করছেন। এটি একটি নতুন ধরণের উত্পন্ন করবে এবং নতুন অ-withinচ্ছিক প্রকারের জন্য thatচ্ছিকের মধ্যে থাকা মানটিকে নির্ধারণ করবে। এইভাবে আপনি সেই পরিবর্তনশীলটির উপর ক্রিয়াকলাপ সম্পাদন করতে পারেন কারণ এটির একটি দৃ value় মান থাকার সংকলক দ্বারা গ্যারান্টি দেওয়া হয়েছে।
শর্তসাপেক্ষে আন-র্যাপিং চেক করবে যে the চ্ছিক মানটি আছে কি nil
না। যদি এটি না হয় nil
তবে একটি নতুন তৈরি করা ধ্রুবক ভেরিয়েবল আসবে যা মান নির্ধারিত হবে এবং অ- alচ্ছিক ধ্রুবকে আবদ্ধ করা হবে। এবং সেখান থেকে আপনি নিরাপদে if
ব্লকের অ-alচ্ছিক ব্যবহার করতে পারেন ।
দ্রষ্টব্য: আপনি শর্তসাপেক্ষে মোড়ক না দেওয়া ধ্রুবকটিকে যে নামটি unচ্ছিকভাবে ভেরিয়েপিং করছেন তার একই নাম দিতে পারেন।
if let myString = myString {
print(myString)
// will print "foobar"
}
শর্তসাপেক্ষে আনারপিং বিকল্পগুলি হ'ল একটি valueচ্ছিকের মানটি অ্যাক্সেস করার সবচেয়ে সহজ উপায় কারণ এটিতে যদি শূন্য মান থাকে তবে আইএফ ব্লকের মধ্যে থাকা সমস্ত কিছুই কার্যকর হবে না। অবশ্যই, যদি কোনও বিবৃতি মত, আপনি অন্য একটি ব্লক অন্তর্ভুক্ত করতে পারেন
if let myString = myString {
print(myString)
// will print "foobar"
}
else {
print("No value")
}
!
("ঠুং শব্দ") অপারেটর হিসাবে পরিচিত যা নিযুক্ত করে জোর করে আন-র্যাপিং করা হয় । এটি কম নিরাপদ তবে তবুও আপনার কোডটি সংকলনের অনুমতি দেয়। তবে আপনি যখনই ব্যাং অপারেটরটি ব্যবহার করেন তখন অবশ্যই আপনার অবশ্যই 1000% নির্দিষ্ট হতে হবে যে আপনার পরিবর্তনশীলটিতে জোর করে আন-র্যাপিংয়ের আগে একটি দৃ value় মান থাকে contain
var myString: String?
myString = "foobar"
print(myString!)
এটি উপরেরটি সম্পূর্ণ বৈধ সুইফট কোড code এটি myString
"foobar" হিসাবে সেট করা হয়েছিল এর মান ছাপে । ব্যবহারকারী foobar
কনসোলে মুদ্রিত দেখতে পাবেন এবং এটি প্রায় এটিই। তবে ধরা যাক মানটি কখনই সেট করা হয়নি:
var myString: String?
print(myString!)
এখন আমাদের হাতে আলাদা পরিস্থিতি। অবজেক্টিভ-সি-এর বিপরীতে, যখনই জোর করে একটি alচ্ছিক আন-rapাক করার চেষ্টা করা হয়, এবং alচ্ছিক সেট করা হয়নি এবং হয় nil
, আপনি যখন নিজের অ্যাপ্লিকেশনটির অভ্যন্তরে কী ঘটেছিল তা ক্র্যাশ হয়ে যায় তা দেখার জন্য যখন alচ্ছিক আনারপ করার চেষ্টা করবেন।
মোড়ক W / টাইপ কাস্টিং । যেমনটি আমরা আগেই বলেছি যে আপনি যখন unwrapping
theচ্ছিক হন তখন আপনি বাস্তবে একটি অ-optionচ্ছিক প্রকারে কাস্টিং করছেন, আপনি অ-optionচ্ছিকটিকে অন্য কোনও ধরণেরও কাস্ট করতে পারেন। উদাহরণ স্বরূপ:
var something: Any?
আমাদের কোডে কোথাও ভেরিয়েবলটি something
কিছু মান সহ সেট করবে। হতে পারে আমরা জেনেরিক ব্যবহার করছি বা অন্য কোনও যুক্তি রয়েছে যা চলছে যা এটি পরিবর্তিত হতে পারে। সুতরাং পরে আমাদের কোডে আমরা ব্যবহার করতে চাই something
তবে এটি অন্যরকম হলেও এটির সাথে অন্যরকম আচরণ করতে সক্ষম হবো। এই ক্ষেত্রে আপনি as
কীওয়ার্ডটি এটি নির্ধারণ করতে ব্যবহার করতে চাইবেন :
দ্রষ্টব্য: as
অপারেটরটি আপনি সুইফটে কাস্টটি টাইপ করেন।
// Conditionally
if let thing = something as? Int {
print(thing) // 0
}
// Optionally
let thing = something as? Int
print(thing) // Optional(0)
// Forcibly
let thing = something as! Int
print(thing) // 0, if no exception is raised
লক্ষ্য করুন দুই এর মধ্যে পার্থক্য as
কীওয়ার্ড। আগের মতো যখন আমরা বাধ্যতামূলকভাবে একটি alচ্ছিক আনারপ্যাপ করেছিলাম তখন আমরা এটি করতে !
ব্যাং অপারেটরটি ব্যবহার করি। এখানে আপনি একই জিনিস করতে হবে কিন্তু এর পরিবর্তে এইমাত্র কোনো অ- ঐচ্ছিক হিসাবে ভোটদান আপনি এটা নামেও ভোটদান করছে Int
। এবং এটি অবশ্যই ডাউন কাস্ট করতে সক্ষম হবে Int
, অন্যথায়, যখন ব্যাং অপারেটরটি ব্যবহার nil
করা হবে তখন মানটি যখন আপনার অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে যায়।
এবং এই ভেরিয়েবলগুলি কোনওভাবে বা গাণিতিক ক্রিয়াকলাপে ব্যবহার করার জন্য এগুলি করার জন্য তাদের অবশ্যই আবদ্ধ হওয়া আবশ্যক।
উদাহরণস্বরূপ, সুইফটে কেবল একই ধরণের বৈধ সংখ্যা ডেটা টাইপ একে অপরের উপর পরিচালিত হতে পারে। আপনি যখন কোনও প্রকারটি কাস্ট করেন তখন আপনি as!
সেই পরিবর্তনশীলটিকে হ্রাস করতে বাধ্য করছেন যদিও আপনি নিশ্চিত যে এটি সেই ধরণের, সুতরাং আপনার অ্যাপ্লিকেশনটি ক্র্যাশ করে চালানো নিরাপদ নয়। এটি ঠিক আছে যতক্ষণ না চলকটি প্রকৃতপক্ষে সেই ধরণের হয় যার জন্য আপনি এটি নিক্ষেপ করছেন, অন্যথায় আপনার হাতে একটি জগাখিচুড়ি থাকবে।
তবুও এর সাথে কাস্টিং as!
আপনার কোডটি সংকলনের অনুমতি দেবে। একটি কাস্টিং দ্বারা as?
একটি ভিন্ন গল্প। আসলে, as?
আপনার ঘোষণা Int
সব একসাথে একটি সম্পূর্ণ ভিন্ন ডাটা টাইপ হিসেবে।
এখন এটা Optional(0)
এবং আপনি যদি কখনও নিজের গৃহকর্মের মতো কিছু লেখার চেষ্টা করেন
1 + Optional(1) = 2
আপনার গণিতের শিক্ষক সম্ভবত আপনাকে একটি "এফ" দিয়েছিলেন। সুইফট একই। সুইড ব্যতীত আপনাকে গ্রেড দেওয়ার পরিবর্তে মোটেই সংকলন করবে না। কারণ দিন শেষে alচ্ছিক বাস্তবে শূন্য হতে পারে ।
সুরক্ষা প্রথম বাচ্চাদের।