List — यह क्या है, SwiftUI में सूची घटक

लेखक: IT Sectr प्रकाशित: 2026-06-25 पढ़ने का समय: 7 मिनट

List SwiftUI में डेटा को लंबवत स्क्रॉल करने योग्य सूची के रूप में प्रदर्शित करने के लिए एक कंटेनर View है, जो UIKit में UITableView के समान है। Apple Developer Documentation, 2024 के अनुसार, List स्थिर और गतिशील अनुभागों, स्वाइप क्रियाओं, पंक्ति पुनर्क्रमण और पुल-टू-रिफ्रेश का समर्थन करता है। UITableView के विपरीत, List SwiftUI और ForEach पर आधारित एक घोषणात्मक API का उपयोग करता है, स्वचालित रूप से कोशिका पुन: उपयोग और बड़ी संख्या में पंक्तियों के साथ प्रदर्शन का प्रबंधन करता है।

मुख्य बातें

  • List — SwiftUI में स्क्रॉल करने योग्य डेटा सूची के लिए कंटेनर
  • ForEach — List में डेटा को गतिशील रूप से प्रदर्शित करने का मुख्य तरीका
  • अनुभाग — शीर्षकों के साथ पंक्तियों को समूहित करने के लिए Section View
  • स्वाइप क्रियाएँ — iOS 15+ के लिए swipeActions
  • पुल-टू-रिफ्रेश — iOS 15+ के लिए .refreshable

SwiftUI में List क्या है?

List एक View है जो आइटमों के अनुक्रम को लंबवत स्क्रॉल करने योग्य सूची में प्रदर्शित करता है। इसे iOS 13 में SwiftUI के साथ पेश किया गया था और यह डेटा सूचियों को प्रदर्शित करने का प्राथमिक तरीका है, जो UIKit के UITableView की जगह लेता है। List स्वचालित रूप से कोशिका पुन: उपयोग, स्क्रॉलिंग और प्रदर्शन का प्रबंधन करता है।

List लेज़ी-लोडिंग का उपयोग करता है: कोशिकाएँ स्क्रॉल करने पर बनाई जाती हैं, एक साथ नहीं। यह इसे ScrollView के अंदर VStack और ForEach से अलग करता है, जहाँ सभी कोशिकाएँ रेंडर समय पर बनाई जाती हैं। List स्वाइप क्रियाओं, पुल-टू-रिफ्रेश, संपादन (हटाना/स्थानांतरित करना) और पंक्ति चयन के लिए अंतर्निहित समर्थन भी प्रदान करता है।

Apple WWDC 2021 (Session 10072) के अनुसार, iOS 15+ में List को संग्रह स्तर पर एक नए diffing तंत्र के कारण महत्वपूर्ण प्रदर्शन सुधार मिले। इसने डेटा अपडेट करते समय List को अधिक कुशल बना दिया, विशेष रूप से सैकड़ों पंक्तियों वाली सूचियों के लिए।

List बनाम ScrollView + VStack

डेवलपर्स अक्सर Views के सेट को प्रदर्शित करने के लिए List और ScrollView के साथ VStack के बीच चयन करते हैं। मुख्य अंतर: List कोशिका पुन: उपयोग (जैसे UITableView) का उपयोग करता है, जबकि ScrollView + VStack सभी Views को तुरंत बनाता है। निश्चित आकार की सूचियों (20 आइटम तक) के लिए, अंतर नगण्य है। 50+ पंक्तियों वाली गतिशील सूचियों के लिए, प्रदर्शन के लिए List बेहतर है।

स्थिर और गतिशील सूचियाँ

स्थिर सूची एक निश्चित संख्या में पंक्तियों वाली सूची है जो सीधे List बॉडी में निर्दिष्ट की जाती हैं। इसका उपयोग मेनू, सेटिंग्स और ज्ञात आइटम सेट वाले फॉर्म के लिए किया जाता है। प्रत्येक पंक्ति बिना लूप या ForEach के स्पष्ट रूप से घोषित की जाती है।

swift
// स्थिर सूची (मेनू और सेटिंग्स के लिए)
List {
    Text("प्रोफ़ाइल")
    Text("सेटिंग्स")
    Text("बारे में")
}

// गतिशील सूची (डेटा के लिए)
struct UserList: View {
    let users: [User]

    var body: some View {
        List(users) { user in
            HStack {
                Text(user.name)
                Text(user.role)
                    .foregroundColor(.secondary)
            }
        }
    }
}

गतिशील सूची List(data:rowContent:) इनिशियलाइज़र या List बॉडी के अंदर ForEach का उपयोग करती है। पहला दृष्टिकोण सुविधाजनक है जब प्रत्येक पंक्ति एक डेटा आइटम से मेल खाती है। दूसरा तब उपयोगी होता है जब डेटा के बीच अनुभाग या अतिरिक्त आइटम हों।

पहचान (Identifiable): गतिशील सूचियों के लिए, डेटा आइटम को Identifiable प्रोटोकॉल का पालन करना चाहिए, या data:id टुपल में एक अद्वितीय पहचानकर्ता के लिए KeyPath निर्दिष्ट करना होगा। SwiftUI परिवर्तनों को ट्रैक करने के लिए पहचानकर्ताओं का उपयोग करता है: जोड़ना, हटाना और पंक्तियों को स्थानांतरित करना।

अनुभाग और डेटा समूहीकरण

Section एक View है जो List में शीर्षक और वैकल्पिक footer के साथ पंक्तियों को समूहित करती है। Section header और footer को ViewBuilder के रूप में स्वीकार करता है, जिससे अनुभाग शीर्षकों के लिए न केवल टेक्स्ट बल्कि कस्टम Views का उपयोग करना संभव होता है।

swift
struct SettingsView: View {
    var body: some View {
        List {
            Section(header: Text("खाता")) {
                Text("नाम")
                Text("ईमेल")
            }
            Section(header: Text("सूचनाएँ")) {
                Toggle("Push", isOn: $pushEnabled)
                Toggle("Email", isOn: $emailEnabled)
            }
        }
        .listStyle(.insetGrouped)
    }
}

// ForEach के साथ गतिशील अनुभाग
List {
    ForEach(groupedData.keys.sorted(), id: \.self) { key in
        Section(header: Text(key)) {
            ForEach(groupedData[key]!) { item in
                Text(item.title)
            }
        }
    }
}

List शैलियाँ: SwiftUI .listStyle() मॉडिफ़ायर के माध्यम से कई अंतर्निहित शैलियाँ प्रदान करता है। .insetGrouped — iOS Settings के लिए मानक, .plain — न्यूनतम, .inset — इंडेंटेशन के साथ, .sidebar — iPad पर Sidebar के लिए।

SwiftUI Cookbook (2024) के अनुसार, गतिशील अनुभागों और अंदर ForEach के साथ Section जटिल संरचना वाले अनुप्रयोगों में डेटा समूहीकरण के लिए एक मानक पैटर्न है। मुख्य नियम: Section को Section के अंदर नेस्ट न करें, और List(data:) इनिशियलाइज़र का उपयोग Section के साथ न करें — List बॉडी के अंदर ForEach का उपयोग करें।

स्वाइप क्रियाएँ और पुल-टू-रिफ्रेश

.swipeActions(edge:allowsFullSwipe:content:) — iOS 15+ के लिए एक मॉडिफ़ायर जो List पंक्तियों में स्वाइप क्रियाएँ जोड़ता है। यह बाएँ (डिफ़ॉल्ट) या दाएँ स्वाइप करने पर विभिन्न रंगों और भूमिकाओं (destructive, cancel) के साथ बटन प्रदर्शित करने की अनुमति देता है।

swift
struct TaskList: View {
    @Binding var tasks: [Task]

    var body: some View {
        List {
            ForEach($tasks) { $task in
                Text(task.title)
                    .swipeActions(edge: .trailing) {
                        Button("हटाएँ", role: .destructive) {
                            tasks.removeAll { $0.id == task.id }
                        }
                    }
                    .swipeActions(edge: .leading) {
                        Button(task.isDone ? "पूर्ववत करें" : "हो गया") {
                            task.isDone.toggle()
                        }
                        .tint(.green)
                    }
            }
        }
        .refreshable {
            // एसिंक डेटा लोडिंग
            await loadTasks()
        }
    }
}

.refreshable — iOS 15+ के लिए एक मॉडिफ़ायर जो पुल-टू-रिफ्रेश जोड़ता है। यह एक async क्लोज़र स्वीकार करता है जो तब निष्पादित होता है जब उपयोगकर्ता सूची को नीचे खींचता है। SwiftUI स्वचालित रूप से लोडिंग इंडिकेटर प्रदर्शित करता है। ऑपरेशन पूरा होने के बाद, इंडिकेटर छिप जाता है।

.onDelete और .onMove — iOS 13+ के लिए मॉडिफ़ायर जो पंक्ति हटाने और पुनर्क्रमण के लिए समर्थन जोड़ते हैं। इनका उपयोग करने के लिए, डेटा को Binding के साथ ForEach में लपेटें या List या ForEach पर .onDelete(perform:) के माध्यम से क्लोज़र पास करें।

List का प्रदर्शन और अनुकूलन

List का प्रदर्शन पंक्तियों की संख्या, प्रत्येक कोशिका की जटिलता और डेटा अपडेट की आवृत्ति पर निर्भर करता है। SwiftUI लेज़ी-लोडिंग और कोशिका पुन: उपयोग (UITableView.dequeueReusableCell के समान) का उपयोग करता है, लेकिन 500+ पंक्तियों वाली सूचियों के लिए अतिरिक्त अनुकूलन की आवश्यकता हो सकती है।

अनुकूलनविवरणiOS संस्करण
Identifiableप्रत्येक आइटम के लिए अद्वितीय IDiOS 13+
EquatableViewडेटा समान होने पर पुनः आरेखण से बचाता हैiOS 13+
id(_:)ID बदलने पर View पुनर्निर्माण को बाध्य करता हैiOS 13+
.equatable()Equatable द्वारा सख्त तुलनाiOS 15+
Diffable dataपरिवर्तनों पर स्वचालित diffiOS 15+

समस्या 1: बार-बार अपडेट. यदि सूची में डेटा बार-बार अपडेट होता है (उदाहरण के लिए, हर सेकंड), तो List प्रत्येक स्थिति परिवर्तन पर दृश्य कोशिकाओं को पुनः आरेखित कर सकता है। समाधान: डेटा के लिए संरचनाओं (value types) का उपयोग करें — SwiftUI उनकी तुलना मान द्वारा करता है और केवल बदली हुई पंक्तियों को पुनः आरेखित करता है।

समस्या 2: भारी कोशिकाएँ. यदि प्रत्येक पंक्ति में जटिल View पदानुक्रम, चित्र और एनिमेशन हैं, तो स्क्रॉलिंग धीमी हो सकती है। समाधान: कोशिकाओं को अलग-अलग Views में निकालें, अनावश्यक पुनः आरेखण को रोकने के लिए EquatableView का उपयोग करें। SwiftUI Lab (2024) के अनुसार, एक जटिल पंक्ति को उप-घटकों में विभाजित करने से रेंडरिंग समय 30–50% कम हो जाता है।

समस्या 3: बड़ी संख्या में पंक्तियाँ. 1000+ पंक्तियों के साथ, List लेज़ी-लोडिंग के कारण अभी भी कुशलता से काम करता है, लेकिन लेआउट गणना के कारण प्रारंभिक लोडिंग धीमी हो सकती है। समाधान: LazyVStack का उपयोग केवल समान पंक्तियों वाली सूचियों के लिए करें जहाँ List सुविधाओं (स्वाइप, अनुभाग) की आवश्यकता नहीं है। पूर्ण-सुविधा वाली सूचियों के लिए, List सबसे अच्छा विकल्प बना हुआ है।

अक्सर पूछे जाने वाले प्रश्न

SwiftUI में List क्या है?

List SwiftUI में स्क्रॉल करने योग्य डेटा सूची प्रदर्शित करने के लिए एक कंटेनर View है। यह घोषणात्मक API के साथ UIKit में UITableView के समतुल्य है। अनुभागों, स्वाइप क्रियाओं, पुल-टू-रिफ्रेश, संपादन और .listStyle() के माध्यम से अनुकूलन का समर्थन करता है।

List, ScrollView + VStack से कैसे भिन्न है?

List लेज़ी-लोडिंग और कोशिका पुन: उपयोग का उपयोग करता है — कोशिकाएँ स्क्रॉल करने पर बनाई जाती हैं। ScrollView + VStack सभी Views एक साथ बनाता है। 50+ पंक्तियों वाली सूचियों के लिए, List बेहतर है। निश्चित छोटे सेट (20 आइटम तक) के लिए, अंतर नगण्य है।

List में पुल-टू-रिफ्रेश कैसे जोड़ें?

.refreshable मॉडिफ़ायर (iOS 15+) का उपयोग करें। डेटा अपडेट तर्क के साथ एक async क्लोज़र पास करें। SwiftUI स्वचालित रूप से लोडिंग इंडिकेटर प्रदर्शित करता है और async ऑपरेशन पूरा होने के बाद उसे छिपा देता है।

List में पंक्तियों को कैसे समूहित करें?

शीर्षक और वैकल्पिक footer के साथ Section View का उपयोग करें। सूची पंक्तियों को Section के अंदर रखें। गतिशील अनुभागों के लिए, groupedData के साथ ForEach का उपयोग करें। iOS जैसी उपस्थिति के लिए सूची शैली .listStyle(.insetGrouped) के माध्यम से कॉन्फ़िगर की जाती है।

बड़ी संख्या में पंक्तियों वाली List को कैसे तेज़ करें?

डेटा के लिए संरचनाओं (value types) का उपयोग करें, EquatableView के साथ जटिल कोशिकाओं को अलग-अलग Views में निकालें, प्रत्येक पंक्ति में बार-बार स्थिति अपडेट से बचें। 1000+ पंक्तियों वाली सूचियों के लिए, यदि List सुविधाओं की आवश्यकता नहीं है तो LazyVStack पर विचार करें।

सारांश

  • List — लेज़ी-लोडिंग और कोशिका पुन: उपयोग के साथ स्क्रॉल करने योग्य सूची के लिए कंटेनर
  • ForEach — List में डेटा को गतिशील रूप से प्रदर्शित करने का मुख्य तरीका
  • Section — शीर्षकों और footer के साथ पंक्तियों का समूहीकरण
  • swipeActions — iOS 15+ के लिए स्वाइप क्रियाएँ
  • refreshable — iOS 15+ के लिए पुल-टू-रिफ्रेश
  • शैलियाँ — .listStyle() के माध्यम से insetGrouped, plain, inset, sidebar
  • प्रदर्शन — Identifiable, EquatableView और value types का उपयोग करें

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें