ViewModifier SwiftUI میں ایک پروٹوکل ہے جو View کی ظاہری اور رویہ کو بدلنے کے لیے دوبارہ استعمال قابل ترمیم کار بنانے کی اجازت دیتا ہے۔ Apple Developer Documentation, 2024 کے مطابق، ViewModifier کو body(content:) میتھڈ کے نفاذ کی ضرورت ہے، جو اصل View لے کر ایک ترمیم شدہ View واپس کرتا ہے، بلٹ-ان ترمیم کاروں کے کسی بھی امتزاج کو ایک واحد قسم میں سمویط کرتا ہے۔ اس پروٹوکل کے بغیر، ڈیولپرز کو استعمال کے ہر مقام پر ایک جیسی ترمیم کار زنجیروں کو دہرانا پڑتا۔
اہم نکات
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 پروٹوکل کو ایک میتھڈ body(content:) کے نفاذ کی ضرورت ہے اور اختیاری طور پر کسٹم ترمیم کار کے ابتدائی پارامیٹرز کے ذریعے رویہ کو کسٹمائز کرنے کے لیے خواص فراہم کر سکتا ہے۔
ViewModifier پروٹوکل body(content:) میتھڈ کی وضاحت کرتا ہے، جو اصل View (Content قسم) وصول کرتا ہے اور ایک ترمیم شدہ View (Body قسم) واپس کرتا ہے۔ SwiftUI ترمیم کار کو View پر content کے طور پر پاس کرکے لاگو کرتا ہے اور نتیجہ نمائش کے لیے استعمال کرتا ہے۔
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 پروٹوکل کے اکسٹینشن میتھڈ ہیں جو ModifiedContent قسم واپس کرتے ہیں۔ وے براہ راست ViewModifier نفاذ نہیں کرتے — SwiftUI ہر بلٹ-ان ترمیم کار کے لیے اندرونی بہترین نفاذ استعمال کرتا ہے۔
| خاصیت | بلٹ-ان ترمیم کار | کسٹم ViewModifier |
|---|---|---|
| نفاذ | View اکسٹینشن میتھڈ | ViewModifier پروٹوکل |
| دوبارہ استعمال | ایک بار کی زنجیر | متعدد استعمال |
| پارامیٹرز | مقرر (رنگ، حجم) | ابتدائی کے ذریعے کوئی بھی |
| کارکردگی | زیادہ سے زیادہ (اندرونی بہترینکردگی) | تھوڑا سے زیادہ اوورہیڈ |
| واپسی کی قسم | ModifiedContent | ModifiedContent |
کسٹم ViewModifier اس وقت جائز ہے جب ترمیم کاروں کا ایک ہی امتزاج دو یا زیادہ مقامات پر استعمال ہوتا ہے۔ ایک بار کے استعمال کے لیے، براہ راست ترمیم کار زنجیر بہتر ہے — کوڈ پڑھنے قابل رہتا ہے اور کامپائلر بہتر بہترین کرتا ہے۔
WWDC 2023 کے مطابق، Apple ایپ کے ڈیزائن سیسٹم سے متعلق اندازوں کے لیے کسٹم ViewModifier بنانے کی سفارش کرتا ہے: کارڈ، بٹن، انپوٹ فیلڈز۔ یہ مسلسلی یقینی بناتا ہے اور ڈیزائن بدلنے پر دیکھ بھال کو آسان کرتا ہے۔
نمونہ 1: ڈیزائن سیسٹم کی سمویطیںے ViewModifier کے سب سے عام استعمال کا مقصد ایک ایپ میں بصری اندازوں کے لیے سچائی کا ایک ذریعہ بنانا ہے۔ ہر ڈیزائن سیسٹم عنصر (کارڈ، بٹن، سرخی) اپنا خود کا ترمیم کار پاتا ہے۔
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% کم کرتا ہے۔
اکثر پوچے جانے والے سوالات
ViewModifier ایک پروٹوکل ہے جو View کی ظاہری یا رویہ کو بدلنے والے دوبارہ استعمال قابل ترمیم کار بنانے کے لیے ہے۔ اسے body(content:) میتھڈ کے نفاذ کی ضرورت ہے، جو اصل View لے کر ایک ترمیم شدہ View واپس کرتا ہے۔
بلٹ-ان ترمیم کار (font, padding) View پروٹوکل کے اکسٹینشن میتھڈ ہیں جو اندرونی بہتر کردگی شدہ نفاذ استعمال کرتے ہیں۔ ViewModifier کسٹم ترمیم کاروں کے لیے ایک پروٹوکل ہے جو بلٹ-ان کے ایک امتزاج کو سمویط کرتا ہے اور اس میں ابتدائی پارامیٹرز ہو سکتے ہیں۔
کسٹم ViewModifier بنائیں جب ترمیم کاروں کا ایک ہی امتزاج تین یا زیادہ مقامات پر استعمال ہوتا ہے۔ ایک بار کی زنجیروں کے لیے، View پر براہ راست ترمیم کار استعمال کریں — یہ سادہ اور زیادہ کارگر ہے۔
ہاں، ViewModifier میں @State یا @Environment خواص ہو سکتی ہیں۔ SwiftUI ان کے لائف سائکل کو View کی طرح منتظم کرتا ہے۔ تاہم، یاد رکھیں کہ body ہر اپ ڈیٹ پر کال ہوتا ہے، لہذا ترمیم کار کے body میں بھاری کاروائی سے گریز کریں۔
@ViewBuilder کے اندر if/else استعمال کریں یا ایک بولین پارامیٹر کے ساتھ ایک ترمیم کار بنائیں جو body کے اندر مشروط طور پر تبدیلیاں لاگو کرے یا چھوڑ دے۔ مثال کے طور پر، اوپر PrimaryButton مشروط انداز لاگو کے لیے isEnabled استعمال کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں