2016-01-05 7 views
6

मैं GitHub में कुछ स्रोत कोड, इस तरह देखा: functional-swiftस्विफ्ट प्रोग्रामिंग शैली

हम वहाँ एक struct की परिभाषा जहाज कहा जाता है देख सकते हैं, और इसमें कुछ चर रहे हैं। निम्नलिखित कोड से हम देख सकते हैं कि इसमें कुछ फ़ंक्शन भी हैं। यह निम्नलिखित शैली में लिखा है:

struct xxx { 
} 

extension xxx { 
    func yyy() {} 
} 

मैं भी कर सकते हैं निम्नलिखित शैली में निश्चित struct:

struct xxx { 
    func yyy() {} 
} 

तो क्या दो शैली के विभिन्न? क्या एक तेज प्रोग्रामिंग शैली गाइड है?

+1

कृपया यह [प्रश्न] देखें (http://stackoverflow.com/questions/28367950/swift-and-using-class-extension) बाहर। मुझे लगता है कि यह आपके प्रश्न को शामिल करता है। – courteouselk

+2

यह आपके कोड को संबंधित तरीकों के समूहों में व्यवस्थित करने में मदद करता है, विशेष रूप से प्रोटोकॉल को अपनाने के दौरान (जैसा कि संदर्भित क्यू एंड ए में बताया गया है)। यहां अनुशंसित: https://github.com/raywenderlich/swift-style-guide#protocol-conformance। –

+0

एक्सटेंशन में विधियों को आप कैसे समूहित करते हैं, व्यक्तिगत स्वाद का विषय है। मैं * प्रत्येक * विधि के लिए एक एक्सटेंशन को परिभाषित नहीं करता, जैसा कि आपने लिंक किए गए उदाहरण कोड में किया है। –

उत्तर

0

From the Swift docs:

एक्सटेंशन एक मौजूदा वर्ग, संरचना, गणन, या प्रोटोकॉल प्रकार के लिए नई कार्यक्षमता जोड़ें। इसमें उन प्रकारों को बढ़ाने की क्षमता शामिल है जिनके लिए आपके पास मूल स्रोत कोड (जिसे रेट्रोएक्टिव मॉडलिंग के रूप में जाना जाता है) तक पहुंच नहीं है।

तो इसकी उपयोगीता तब होती है जब आप पहले से ही मौजूदा कार्यान्वयन को विस्तारित करना चाहते हैं। ऐप्पल में बहुत अच्छा दस्तावेज है, और मैं अत्यधिक अनुशंसा करता हूं कि आप उपरोक्त लिंक को पढ़ लें।

+0

यहां प्रश्न यह है कि आप अपने प्रकार को परिभाषित करने के बारे में हैं, मौजूदा प्रकार को विस्तारित करने के बारे में नहीं, जिसके लिए आपके पास स्रोत कोड नहीं है। –

1
अपने उदाहरण से

, पहले एक में बनाया गया एक समारोह के साथ एक struct है एक विस्तार

struct xxx { 
} 

extension xxx { 
function yyy() {} 
} 

दूसरे के साथ एक बुनियादी struct है।

struct xxx { 
function yyy() {} 
} 

कल्पना करें कि आप मूल struct संशोधित नहीं कर सकते कुछ कारणों से, लेकिन आप अभी भी कार्य करने में सक्षम होना चाहते हैं yyy() -> आप श्रेणी को संशोधित किए बिना फ़ंक्शन yyy() को कॉल करने के लिए कक्षा का विस्तार कर सकते हैं (या जिस तरह से यह आपके प्रोग्राम में कहीं और व्यवहार करता है)

"एक्सटेंशन एक प्रकार में नई कार्यक्षमता जोड़ सकते हैं, लेकिन वे मौजूदा कार्यक्षमता को ओवरराइड नहीं कर सकते हैं।" (src: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html)

-> एक्सटेंशन तब उपयोगी होते हैं जब आपके पास कक्षा तक पहुंच नहीं है लेकिन आप कुछ कार्यक्षमताओं को जोड़ना चाहते हैं। एक्सटेंशन का उपयोग करके, आप अपनी कक्षाओं को विभाजित कर सकते हैं और आवश्यकतानुसार कक्षा क्या कर सकते हैं अनुकूलित कर सकते हैं।

संबंधित मुद्दे