ViewModifier: এটি কী, SwiftUI-তে View মডিফায়ার

লেখক: IT Sectr প্রকাশিত: 2026-06-24 পড়ার সময়: 6 মিনিট

ViewModifier হল SwiftUI-তে একটি প্রোটোকল যা View-এর চেহারা এবং আচরণ পরিবর্তনের জন্য পুনঃব্যবহারযোগ্য মডিফায়ার তৈরি করতে দেয়। Apple Developer Documentation, 2024 অনুসারে, ViewModifier-এ body(content:) method বাস্তবায়ন করা আবশ্যক, যা মূল View গ্রহণ করে এবং একটি পরিবর্তিত View ফেরত দেয়, বিল্ট-ইন মডিফায়ারের যেকোনো সমন্বয়কে একটি একক টাইপে এনক্যাপসুলেট করে। এই প্রোটোকল ছাড়া, ডেভেলপারদের ব্যবহারের প্রতিটি জায়গায় একই মডিফায়ার চেইন পুনরাবৃত্তি করতে হতো।

মূল পয়েন্ট

  • ViewModifier — SwiftUI-তে কাস্টম View মডিফায়ার তৈরির প্রোটোকল
  • body(content:) — একমাত্র বাধ্যতামূলক method যা পরিবর্তিত View ফেরত দেয়
  • বিল্ট-ইন মডিফায়ার (font, padding) — View-এর এক্সটেনশন method, ViewModifier বাস্তবায়ন করে না
  • কাস্টম মডিফায়ার পুনরাবৃত্ত স্টাইল সমন্বয় এনক্যাপসুলেট করতে দেয়
  • ModifiedContent — View-তে ViewModifier প্রয়োগের সময় ফেরত আসা টাইপ

SwiftUI-তে ViewModifier কী?

ViewModifier একটি SwiftUI প্রোটোকল যা মডিফায়ার তৈরির জন্য একটি চুক্তি সংজ্ঞায়িত করে যা যেকোনো View টাইপে প্রয়োগ করা যেতে পারে। এটি protocol ViewModifier { associatedtype Body: View; func body(content: Content) -> Body } হিসেবে ঘোষণা করা হয়, যেখানে Content হল মডিফায়ারে পাঠানো মূল View-এর টাইপ।

ViewModifier প্রোটোকল SwiftUI-এর প্রথম সংস্করণের সাথে iOS 13-এ আবির্ভূত হয়েছিল এবং iOS 18+ পর্যন্ত স্থিতিশীল রয়েছে। মূল লক্ষ্য হল ডেভেলপারদের পুনরাবৃত্ত মডিফায়ার চেইনকে একটি একক পুনঃব্যবহারযোগ্য টাইপে এনক্যাপসুলেট করার জন্য একটি প্রক্রিয়া প্রদান করা। ViewModifier ছাড়া, প্রতিবার যখন আপনাকে স্টাইলের একই সেট প্রয়োগ করতে হতো, তখন আপনাকে ম্যানুয়ালি সব মডিফায়ার পুনরাবৃত্তি করতে হতো।

Swift by Sundell (2023) অনুসারে, ViewModifier হল SwiftUI প্রকল্পে স্টাইল সংগঠিত করার পছন্দের উপায় যখন মডিফায়ারের একই সেট তিন বা ততোধিক জায়গায় ব্যবহৃত হয়। একবার ব্যবহারের জন্য, সরাসরি View-তে বিল্ট-ইন মডিফায়ারের চেইন যথেষ্ট।

প্রোটোকল সিনট্যাক্স

ViewModifier প্রোটোকলে একটি method body(content:) বাস্তবায়ন করা আবশ্যক এবং ঐচ্ছিকভাবে কাস্টম মডিফায়ারের ইনিশিয়ালাইজার প্যারামিটারের মাধ্যমে আচরণ কাস্টমাইজ করার জন্য প্রপার্টি সরবরাহ করতে পারে।

ViewModifier প্রোটোকল কীভাবে কাজ করে

ViewModifier প্রোটোকল body(content:) method সংজ্ঞায়িত করে, যা মূল View (Content টাইপ) গ্রহণ করে এবং একটি পরিবর্তিত View (Body টাইপ) ফেরত দেয়। SwiftUI View-তে মডিফায়ার প্রয়োগ করে content হিসেবে পাস করে এবং প্রদর্শনের জন্য ফলাফল ব্যবহার করে।

swift
struct CardStyle: ViewModifier {
    func body(content: Content) -> some View {
        content
            .padding(16)
            .background(Color.white)
            .cornerRadius(12)
            .shadow(radius: 4, x: 0, y: 2)
    }
}

// ব্যবহার:
Text("হ্যালো, SwiftUI!")
    .modifier(CardStyle())

যখন আপনি .modifier(CardStyle()) কল করেন, SwiftUI ModifiedContent<Text, CardStyle>-এর একটি ইনস্টান্স তৈরি করে যা মূল View এবং মডিফায়ার সংরক্ষণ করে। রেন্ডারিংের সময়, SwiftUI CardStyle.body(content: text) কল করে, padding, background, cornerRadius এবং shadow সহ একটি পরিবর্তিত View পায়।

গুরুত্বপূর্ণ পার্থক্য: ViewModifier.body প্রতিবার View আপডেট হলে কল করা হয়, তাই body-র ভিতরে ভারী গণনা বা সাইড ইফেক্ট থাকা উচিত নয়। যদি মডিফায়ার বাহ্যিক ডেটার (state, environment) উপর নির্ভর করে, তবে সেগুলো ইনিশিয়ালাইজার প্যারামিটারের মাধ্যমে পাঠান।

বিল্ট-ইন বনাম কাস্টম মডিফায়ার: পার্থক্য

SwiftUI-এর বিল্ট-ইন মডিফায়ার (font, foregroundColor, frame, padding) View প্রোটোকলের এক্সটেনশন method যা ModifiedContent টাইপ ফেরত দেয়। তারা সরাসরি ViewModifier বাস্তবায়ন করে না — SwiftUI প্রতিটি বিল্ট-ইন মডিফায়ারের জন্য অভ্যন্তরীণ অপ্টিমাইজড বাস্তবায়ন ব্যবহার করে।

বৈশিষ্ট্যবিল্ট-ইন মডিফায়ারকাস্টম ViewModifier
বাস্তবায়নView এক্সটেনশন methodViewModifier প্রোটোকল
পুনঃব্যবহারএকবারের চেইনএকাধিকবার ব্যবহার
প্যারামিটারস্থির (রং, আকার)ইনিশিয়ালাইজারের মাধ্যমে যেকোনো
পারফরমান্যাসসর্বোচ্চ (অভ্যন্তরীণ অপ্টিমাইজেশন)সামান্য বেশি ওভারহেড
রিটার্ন টাইপModifiedContentModifiedContent

কাস্টম ViewModifier ন্যায়্য যখন মডিফায়ারের একই সমন্বয় দুই বা ততোধিক জায়গায় ব্যবহৃত হয়। একবার ব্যবহারের জন্য, সরাসরি মডিফায়ার চেইন পছন্দনীয় — কোড পাঠযোগ্য থাকে এবং কম্পাইলার ভালো অপ্টিমাইজ করে।

WWDC 2023 অনুসারে, Apple অ্যাপ্লিকেশনের ডিজাইন সিস্টেমের সাথে সম্পর্কিত স্টাইলের জন্য কাস্টম ViewModifier তৈরি করার সুপারিশ করে: কার্ড, বাটন, ইনপুট ফিল্ড। এটি সামঞ্জস্য নিশ্চিত করে এবং ডিজাইন পরিবর্তন হলে রক্ষণাবেক্ষণ সহজ করে।

ViewModifier ব্যবহারের প্যাটার্ন

প্যাটার্ন 1: ডিজাইন সিস্টেম এনক্যাপসুলেশন। ViewModifier-এর সবচেয়ে সাধারণ ব্যবহার হল অ্যাপ্লিকেশনে ভিজুয়াল স্টাইলের জন্য সত্যের একক উৎস তৈরি করা। প্রতিটি ডিজাইন সিস্টেম উপাদান (কার্ড, বাটন, শিরোনাম) নিজস্ব মডিফায়ার পায়।

swift
struct PrimaryButton: ViewModifier {
    var isEnabled: Bool

    func body(content: Content) -> some View {
        content
            .font(.headline.weight(.semibold))
            .foregroundColor(.white)
            .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24))
            .background(isEnabled ? Color.blue : Color.gray)
            .cornerRadius(8)
            .opacity(isEnabled ? 1.0 : 0.6)
    }
}

প্যাটার্ন 2: শর্তসাপেক্ষ মডিফায়ার প্রয়োগ। কখনো কখনো আপনাকে শুধুমাত্র একটি নির্দিষ্ট শর্তে মডিফায়ার প্রয়োগ করতে হবে। বুলিয়ান প্যারামিটার সহ ViewModifier এই লজিক body-র ভিতরে এনক্যাপসুলেট করতে দেয়।

প্যাটার্ন 3: মডিফায়ার কম্পোজিশন। একটি ViewModifier তার body-র ভিতরে অন্য ViewModifier প্রয়োগ করতে পারে। এটি মডিফায়ারের একটি শ্রেণিবিন্যাস তৈরি করতে দেয়, যেখানে প্রতিটি ভিজুয়াল প্রস্তুতির নিজস্ব দিকের জন্য দায়়ী। উদাহরণস্বরূপ, CardStyle অভ্যন্তরীণভাবে ShadowStyle এবং BorderStyle প্রয়োগ করতে পারে।

Point-Free (2024) অনুসারে, ViewModifier-এর মাধ্যমে মডিফায়ারের কম্পোজিশন উত্তরাধিকার থেকে পছন্দনীয়: প্রতিটি মডিফায়ার একটি কাজের জন্য দায়়ী এবং এগুলো স্বাধীনভাবে একত্রিত করা যায়। এটি SwiftUI-তে একক দায়়িত্ব নীতি অনুসরণ করে।

পারফরমান্যাস এবং মডিফায়ার কম্পোজিশন

ViewModifier-এর পারফরমান্যাস প্রতিটি প্রয়োগের সাথে তৈরি ModifiedContent র্যাপারের সংখ্যার উপর নির্ভর করে। SwiftUI রেন্ডারিং ধাপে ডিফিং-এর মাধ্যমে মডিফায়ার চেইন অপ্টিমাইজ করে, কিন্তু মডিফায়ারের অত্যধিক সংখ্যা আপডেট ধীর করতে পারে।

মডিফায়ারের সংখ্যাপারফরমান্যাসে প্রভাবসুপারিশ
1–5সর্বনিম্নযেকোনো View-এর জন্য স্বাভাবিক
5–10মাঝারিViewModifier-এ গ্রুপ করুন
10–20লক্ষ্যণীয়একটি কাস্টম মডিফায়ারে একত্রিত করুন
20+গুরুতরView আর্কিটেক্চার পুনর্বিবেচনা করুন

অপ্টিমাইজেশন: একই টাইপের একাধিক অনুক্রমিক মডিফায়ার (যেমন, একাধিক padding) একটিতে একত্রিত করুন। PreferenceKey শুধুমাত্র যখন সত্যিই প্রয়োজন তখন ব্যবহার করুন — মডিফায়ার যা প্রেফারেন্স পড়ে তা অতিরিক্ত রেন্ডারিং পাস ট্রিগার করে।

সাধারণ নিয়ম: যদি একটি View-এ 10-এর বেশি মডিফায়ার থাকে — সেগুলোর কিছু একটি কাস্টম ViewModifier-এ বের করে নিন। এটি পঠনযোগ্যতা উন্নত করবে এবং SwiftUI আপডেট অপ্টিমাইজ করতে দেবে। SwiftUI Lab (2024) অনুসারে, ViewModifier-এ মডিফায়ার গ্রুপ করা জটিল Views-এর জন্য রেন্ডারিং সময় 15–30% কমায়।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

SwiftUI-তে ViewModifier কী?

ViewModifier হল পুনঃব্যবহারযোগ্য মডিফায়ার তৈরির জন্য একটি প্রোটোকল যা View-এর চেহারা বা আচরণ পরিবর্তন করে। এতে body(content:) method বাস্তবায়ন করা আবশ্যক, যা মূল View গ্রহণ করে এবং একটি পরিবর্তিত View ফেরত দেয়।

ViewModifier কীভাবে বিল্ট-ইন মডিফায়ার থেকে আলাদা?

বিল্ট-ইন মডিফায়ার (font, padding) View প্রোটোকলের এক্সটেনশন method যা অভ্যন্তরীণ অপ্টিমাইজড বাস্তবায়ন ব্যবহার করে। ViewModifier হল কাস্টম মডিফায়ারের জন্য একটি প্রোটোকল যা বিল্ট-ইনগুলোর সমন্বয় এনক্যাপসুলেট করে এবং ইনিশিয়ালাইজার প্যারামিটার থাকতে পারে।

কখন আমার কাস্টম ViewModifier তৈরি করা উচিত?

কাস্টম ViewModifier তৈরি করুন যখন মডিফায়ারের একই সমন্বয় তিন বা ততোধিক জায়গায় ব্যবহৃত হয়। একবারের চেইনের জন্য, View-এ সরাসরি মডিফায়ার ব্যবহার করুন — এটি সহজ এবং আরও কার্যকর।

ViewModifier কি State ধারণ করতে পারে?

হ্যাঁ, ViewModifier-এ @State বা @Environment প্রপার্টি থাকতে পারে। SwiftUI তাদের lifecycle View-এর মতোই পরিচালনা করে। তবে মনে রাখবেন, body প্রতি আপডেটে কল হয়, তাই মডিফায়ারের body-তে ভারী অপারেশন এড়িয়ে চলুন।

কিভাবে শর্তসাপেক্ষে ViewModifier প্রয়োগ করবেন?

@ViewBuilder-এর ভিতরে if/else ব্যবহার করুন বা একটি বুলিয়ান প্যারামিটার সহ একটি মডিফায়ার তৈরি করুন যা body-র ভিতরে শর্তসাপেক্ষে পরিবর্তন প্রয়োগ বা বাদ দেয়। উদাহরণস্বরূপ, উপরে PrimaryButton শর্তসাপেক্ষে স্টাইল প্রয়োগের জন্য isEnabled ব্যবহার করে।

সারসংক্ষেপ

  • ViewModifier — পুনঃব্যবহারযোগ্য View মডিফায়ার তৈরির SwiftUI প্রোটোকল
  • body(content:) — method যা মূল View নিয়ে পরিবর্তিত View ফেরত দেয়
  • বিল্ট-ইন মডিফায়ার — View এক্সটেনশন method, ViewModifier বাস্তবায়ন করে না
  • ModifiedContent — টাইপ যা মূল View এবং প্রযুক্ত মডিফায়ার সংরক্ষণ করে
  • কাস্টম মডিফায়ার ন্যায়্য যখন সমন্বয় 3+ জায়গায় পুনরাবৃত্তি হয়
  • ViewModifier-এর মাধ্যমে মডিফায়ারের কম্পোজিশন উত্তরাধিকার থেকে পছন্দনীয়
  • ViewModifier-এ মডিফায়ার গ্রুপ করলে পারফরমান্যাস 15–30% উন্নত হয়

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন