একটি ফাংশনের বডির ভেতরে প্যারামিটারগুলোকে ভ্যারিয়েবল নয়, বরং কনস্ট্যান্ট হিসেবে ধরা হয়; কোনো প্যারামিটারের মান পরিবর্তন করার চেষ্টা করলে কম্পাইল-টাইম এরর হয়। কোনো ফাংশন যদি কোনো প্যারামিটারের মান পরিবর্তন করতে চায়, তাহলে এই পরিবর্তনযোগ্যতা স্পষ্ট করতে তাকে একটি ইন-আউট প্যারামিটার ব্যবহার করতে হবে।
ইন-আউট প্যারামিটার ব্যবহার করতে হলে একজন প্রোগ্রামারকে তিনটি বিষয়ে নিশ্চিত হতে হয়:
: এবং টাইপের নামের মাঝখানে inout কিওয়ার্ডটি লিখে ইন-আউট প্যারামিটারগুলোকে স্পষ্টভাবে চিহ্নিত করতে হবে।& বসাতে হবে, যা এটিকে পরিবর্তনযোগ্য হিসেবে স্পষ্টভাবে চিহ্নিত করে।এভাবে করলে ফাংশনটি ইন-আউট প্যারামিটারের একটি অভ্যন্তরীণ কপি তৈরি করবে, ফাংশনের বডিতে বলা অনুযায়ী সেটি পরিবর্তন করবে, এবং ফাংশন রিটার্ন করার সময় পরিবর্তিত মানটি যে ভ্যারিয়েবলটি পাঠানো হয়েছিল সেটিতে ফিরিয়ে কপি করবে।
func updateVersion(_ record: inout (version: Int, title: String)) {
record.version += 1
}
var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)
// dbRecord is now (3, "Exercism")
ইন-আউট প্যারামিটার নিয়ে আরও কয়েকটি অতিরিক্ত নিয়ম সম্পর্কে সচেতন থাকা উচিত।
1. ইন-আউট প্যারামিটারযুক্ত কোনো ফাংশনের ভেতরে, ইন-আউট প্যারামিটার হিসেবে যে ভ্যারিয়েবলটি পাঠানো হয়েছে সেটি রেফারেন্স করার অনুমতি নেই।
2. একই ফাংশনে একই ভ্যারিয়েবলকে একাধিক ইন-আউট প্যারামিটার হিসেবে পাঠানো যায় না।
উদাহরণস্বরূপ, `inoutFunc(&mutVar, &mutVar)` একটি কম্পাইলার এরর তৈরি করে।