स्विफ्ट और एक्सकोड के लिए नया, संस्करण 11.3.1।

अगर मैं एक कक्षा में func<tab> हिट करता हूं, तो प्लेसहोल्डर मान अच्छी तरह से पॉप हो जाते हैं और मैं उन्हें पूरा करने के लिए उनके माध्यम से टैब कर सकता हूं।

हालाँकि, जब मेरे पास एक साधारण खेल का मैदान फ़ाइल खुली और हिट होती है func<tab> मुझे कोई प्लेसहोल्डर मान नहीं दिखाई देता है। बस कीवर्ड func दिखाई देता है।

मैं शीर्ष-स्तरीय फ़ंक्शंस के लिए इन प्लेसहोल्डर मानों को कैसे चालू करूं?

1
StevieD 16 फरवरी 2020, 07:51

2 जवाब

आप जिस बारे में बात कर रहे हैं वह "कोड स्निपेट" है। आप उन्हें न केवल "मैजिक वर्ड" टाइप करके, बल्कि ऊपर दाईं ओर प्लस साइन पर क्लिक करके, फिर सूची में से चुनकर सम्मिलित कर सकते हैं:

enter image description here

यदि आप "फ़ंक्शन" की खोज करते हैं, तो आप वह ढूंढ सकते हैं जिसे आप ढूंढ रहे हैं।

लेकिन कोड लिखते समय कौन बटन क्लिक करना चाहता है, है ना? ऐसा लगता है कि कुछ स्निपेट किसी तरह खेल के मैदानों में उपयोग नहीं किए जा सकते, जबकि अन्य कर सकते हैं। यह एक एक्सकोड बग की तरह लगता है। मेरे लिए, var, varget, vargetset जैसी सभी चीज़ें काम कर गईं।

वैकल्पिक हल के रूप में, आप किसी फ़ंक्शन के लिए अपना स्वयं का कोड स्निपेट बना सकते हैं। सबसे पहले, इस कोड को Xcode में पेस्ट करें:

func <#name#>(<#parameters#>) -> <#return type#> {
    <#function body#>
}

यह सब चुनें, फिर संपादक -> कोड स्निपेट बनाएं पर जाएं। इसे एक नाम दें, और सबसे महत्वपूर्ण बात, एक "पूर्णता"।

enter image description here

जाहिर है, आप अभी भी func को "पूर्णता" के रूप में रख सकते हैं और यह काम करेगा।

1
Sweeper 16 फरवरी 2020, 11:23
हां, मैं अपने खुद के स्निपेट बनाने से परिचित हूं। लेकिन विशेष रूप से, जब मैं "खेल का मैदान" फ़ाइल में होता हूं, तो कोई भी स्निपेट func के साथ पॉप अप नहीं होता है। मैंने /Applications/Xcode.app/Contents/PlugIns/IDESourceEditor.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets फ़ाइल को हैक कर लिया और <key>IDECodeSnippetCompletionScopes</key> को "सभी" में बदल दिया।
 – 
StevieD
16 फरवरी 2020, 17:56
हम्म, मुझे वास्तव में ऐसा लगता है कि यह एक्सकोड में एक बग है। यदि आप अपने स्वयं के कोड स्निपेट का दायरा "कक्षा कार्यान्वयन और शीर्ष स्तर" (अंतर्निहित "फ़ंक्शन स्टेटमेंट" स्निपेट के समान) में बदलते हैं, तो यह अभी भी काम करेगा...
 – 
Sweeper
16 फरवरी 2020, 19:24
1
दूसरे विचार पर, शायद अंतर्निर्मित स्निपेट सही ढंग से व्यवहार कर रहे हैं, और यह उपयोगकर्ता द्वारा बनाए गए स्निपेट हैं जो नहीं हैं। यदि मैं "टिप्पणी या स्ट्रिंग" के दायरे के साथ एक स्निपेट बनाता हूं, तो मैं इसे किसी भी तरह से खेल के मैदान में शीर्ष स्तर पर उपयोग कर सकता हूं। मेरा सिद्धांत यह है कि खेल के मैदान में शीर्ष स्तर वास्तव में शीर्ष स्तर नहीं है। इसे एक्सकोड द्वारा "फ़ंक्शन या विधि" माना जाता है, यही कारण है कि आप कोड स्निपेट का उपयोग नहीं कर सकते हैं जिनमें "कक्षा कार्यान्वयन या शीर्ष स्तर" का दायरा है।
 – 
Sweeper
16 फरवरी 2020, 19:40
मुझे जो नहीं मिलता है वह यह है कि मैंने "ऑल" के दायरे को बदलने के लिए एक्सएमएल फाइल को हैक कर लिया है। यदि खेल का मैदान फ़ाइल top level नहीं है, तो वास्तव में यह क्या है? मुझे लगता है कि फ़ाइल के मुख्य भाग में कोई भी कार्य "शीर्ष स्तर" माना जाएगा। मुझे स्पष्ट रूप से यह नहीं समझना चाहिए कि खेल के मैदानों की संरचना कैसे की जाती है।
 – 
StevieD
16 फरवरी 2020, 21:40
1
मेरे परीक्षण के अनुसार, यह "फ़ंक्शन या विधि" प्रतीत होता है, जैसा कि मैंने अपनी पिछली टिप्पणी में कहा था।
 – 
Sweeper
16 फरवरी 2020, 21:55

मुझे यकीन नहीं है कि कोई बेहतर उत्तर है, लेकिन "खेल का मैदान" फ़ाइल संपादित करते समय func स्निपेट दिखाने के लिए यहां क्या काम किया गया है:

1) स्निपेट्स फ़ाइल को इसके साथ संपादित करें: sudo vim /Applications/Xcode.app/Contents/PlugIns/IDESourceEditor.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets

2) स्निपेट खोजें और संबंधित स्कोप कुंजी ढूंढें और स्कोप कुंजी की सरणी को <string>All</string> में संशोधित करें:

        <key>IDECodeSnippetCompletionScopes</key>
        <array>
            <string>All</string>
        </array>

हां, मैं अपना खुद का स्निपेट बना सकता हूं जो बिल्ट-इन स्निपेट जैसा ही है लेकिन फिर मेरे पास दो अलग-अलग स्निपेट हैं जो एक ही काम करते हैं, जो मुझे परेशान करता है।

1
StevieD 16 फरवरी 2020, 18:01