2016-05-17 12 views
6

मैं जब स्विफ्ट में प्रोटोकॉल अनुरूपता को लागू करने, एक ही अंतिम परिणाम के साथ दो विकल्प हैं:स्विफ्ट प्रोटोकॉल को कार्यान्वित करने के लिए कहां?

  • वर्ग भीतर प्रोटोकॉल को लागू करें - जो है, राज्य वर्ग परिभाषा के शीर्ष पर अनुरूपता, और कार्यान्वयन डाल कक्षा के शरीर के अंदर, या
  • एक्सटेंशन में प्रोटोकॉल को कार्यान्वित करें - यानी कक्षा के बाहर पूरी तरह प्रोटोकॉल अनुरूपता कोड करें।

यहाँ एक उदाहरण है:

public class MyClass : CustomDebugStringConvertible { 
    ... // Something 
    public var debugDescription : String { 
     return "MyClass" 
    } 
} 

बनाम स्विफ्ट किताबों में

class MyClass { 
    ... // Something 
} 
extension MyClass : CustomDebugStringConvertible { 
    public var debugDescription: String { 
     return "MyClass" 
    } 
} 

कोड नमूने पहले दृष्टिकोण पर ध्यान केंद्रित करते हैं; Apple's source code of Swift core बताता है कि वे केवल दूसरे दृष्टिकोण का उपयोग करते हैं (उदाहरण के लिए Bool और Optional देखें)।

क्या स्थिति के आधार पर दो दृष्टिकोणों के बीच निर्णय लेने का कोई अच्छा तरीका है, या क्या यह केवल वरीयता पसंद करने का मामला है?

+2

यह पूरी तरह से प्राथमिकता का विषय है, और इस प्रकार राय का विषय है। व्यक्तिगत रूप से मैं लगभग हमेशा बाद में करता हूं, लेकिन बिल्कुल हमेशा नहीं। यहां एक्सटेंशन पर मेरी टिप्पणियां भी देखें: http://www.apeth.com/swiftBook/ch04.html#_extending_object_types – matt

उत्तर

4

यह कोडिंग वरीयता और पठनीयता की बात है। यदि आपको लगता है कि आपकी कक्षा विशाल होने जा रही है, तो इसे विस्तार में लागू करने के लिए और अधिक समझ हो सकती है ताकि यह विधियां आपकी कक्षा में अव्यवस्था को न जोड़ सकें। यदि यह एक छोटी कक्षा है, तो मैं सब एक में कहूंगा, क्योंकि पठनीयता कम प्रभावित होती है।

4

मैं इसे अधिकतर कोडिंग वरीयता के रूप में देखता हूं। मेरी टीम में हमने दूसरे दृष्टिकोण को अपनाना शुरू कर दिया है। पहले मैंने सोचा कि यह विस्तार का एक अजीब उपयोग था लेकिन मुझे यह पसंद आया है। यह प्रोटोकॉल के कार्यान्वित तरीकों को अच्छी तरह से एक साथ रखता है और यह इंप्रेशन देता है कि वर्ग स्वयं छोटा है (वास्तव में ऑप्टिक्स वास्तव में)। अगर भ्रम के लिए कुछ जटिलताओं या अवसरों को मैं देख सकता हूं, तो कक्षा में एक टेबलव्यू है और आप डेटासोर्स और प्रतिनिधि को लागू करने के लिए एक्सटेंशन का उपयोग करते हैं। यदि कोई उस कक्षा को उप-वर्ग करता है, तो हो सकता है कि वे विस्तार से अवगत न हों और अप्रत्याशित व्यवहार देखें।

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