“?” দিয়ে সুইফট ভেরিয়েবল সাজসজ্জা? (প্রশ্ন চিহ্ন) এবং "!" (বিস্ময়বোধক চিহ্ন)


106

আমি বুঝেছি যে সুইফটে সমস্ত ভেরিয়েবলকে একটি মান দিয়ে সেট করতে হবে এবং বিকল্পগুলি ব্যবহার করে আমরা একটি ভেরিয়েবল nilশুরুতে সেট করতে পারি ।

আমি যা বুঝতে পারি না তা হ'ল কোনটি দিয়ে একটি ভেরিয়েবল নির্ধারণ করা !হচ্ছে, কারণ আমি এই ধারণাটির মধ্যে ছিলাম যে এটি একটি optionচ্ছিকের থেকে একটি "মূল্যকে আবরণ" করে। আমি ভেবেছিলাম এটি করে আপনি গ্যারান্টি দিচ্ছেন যে সেই পরিবর্তনশীলটি আন-র্যাপ করার জন্য একটি মূল্য রয়েছে, এ কারণেই আইবিএ ক্রিয়াকলাপে এবং আপনি দেখতে পান এটি ব্যবহার করা।

সোজা কথায় বলতে গেলে, আপনি যখন এই জাতীয় কিছু করেন তখন ভেরিয়েবলটি কী আরম্ভ করা যায়:

var aShape : CAShapeLayer!

এবং কেন / কখন আমি এই করব?


আপনি এই সত্যটি যাচাই করার পরে কোনও ভেরিয়েবলটি এনটি নিল হয় তা জানাতে এটি করবেন ।
ম্যাথিয়াস

এটিকে সদৃশ হিসাবে চিহ্নিত করা উচিত বলে আমি মনে করি না। "Anচ্ছিক কী?" "বিকল্প দুটি ধরণের মধ্যে পার্থক্য কী?" হিসাবে একই প্রশ্ন নয়? যা এই প্রশ্নটি থেকে বেশ কি
জিয়াআরো

@ জিয়ারো এমনকি সেক্ষেত্রে ইতিমধ্যে alsচ্ছিক, অন্তর্নিহিত অপরিবর্তিত বিকল্পগুলি এবং এর মতো আরও অনেক প্রশ্ন রয়েছে। আপনি এটিকেও
জ্যাক

@ জ্যাকউইউ ওকে, তবে আমি নিশ্চিত যে এই প্রশ্নটি যখন জিজ্ঞাসা করা হয়েছিল তখন এটি সদৃশ ছিল না। (উদাহরণস্বরূপ এটি আপনার পুরো সপ্তাহের আগে জিজ্ঞাসা করা হয়েছিল)
জিয়ারো

@ জিয়ারো আপনি একটি ভাল বক্তব্য রেখেছেন, আমি দেখতে পেলাম না এটি পুরানো ছিল..এছাড়াও অন্যটিকে এইটির সদৃশ হিসাবে চিহ্নিত করা উচিত ..
জ্যাক

উত্তর:


145

একটি প্রকারের ঘোষণায় এটির !অনুরূপ ?। উভয়ই একটি alচ্ছিক , তবে এটি !একটি " অন্তর্নিহিতভাবে আবদ্ধ" alচ্ছিক , যার অর্থ আপনাকে মানটি অ্যাক্সেস করার জন্য এটিকে আবরণ করতে হবে না (তবে এটি এখনও শূন্য হতে পারে)।

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

// Cannot be nil
var x: Int = 1

// The type here is not "Int", it's "Optional Int"
var y: Int? = 2

// The type here is "Implicitly Unwrapped Optional Int"
var z: Int! = 3

ব্যবহার:

// you can add x and z
x + z == 4

// ...but not x and y, because y needs to be unwrapped
x + y // error

// to add x and y you need to do:
x + y!

// but you *should* do this:
if let y_val = y {
    x + y_val
}

7
সুস্পষ্টভাবে মোড়কযুক্ত বিকল্পগুলি স্যুইফ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজের 56 পৃষ্ঠায় শুরু হওয়া যথাযথভাবে বর্ণিত অংশে বর্ণিত হয়েছে ।
কালেব

@ কালেব আমি অনলাইন ডক্সের প্রাসঙ্গিক বিভাগে একটি লিঙ্ক যুক্ত করেছি যেখানে আমি
স্পষ্টতভাবে মোড়কযুক্ত বিকল্পগুলি

দুর্দান্ত তথ্য, ধন্যবাদ। সাধারণত এতক্ষণে সুইফট আমাদের উপর যে সুরক্ষা চাপিয়ে দিচ্ছে তা ভালবাসা, অনেক কম বাগ তৈরি করা উচিত :)।
জেসন রেনালদো

জিয়ারো: ভাগ করে নেওয়ার জন্য আপনাকে অনেক ধন্যবাদ। এটি উপরের উদাহরণের মাধ্যমে ব্যবহারকারীকে নিখুঁতভাবে বুঝতে সক্ষম করে। :)
এশা

3
আমি মনে করি " এটিই মূলত আমাদের ইতিবাচক-সিতে ইতিমধ্যে আচরণ ছিল " বাক্যটি বিভ্রান্তিকর হতে পারে। Objective-C সালে এক একটি অ্যাক্সেস করতে পারেন nilযখন এটা শূন্য মান এবং আসলে এটা দিয়ে "কাজ", দ্রুতগতি একটি পরোক্ষভাবে মোড়ানো ঐচ্ছিক অ্যাক্সেস হবে একটি রানটাইম ব্যতিক্রম নিক্ষেপ করা।
সাসাা ওল্ফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.