मैं अपनी मौजूदा स्विफ्ट क्लास की श्रेणी बनाना चाहता हूं, लेकिन ऐसा करने के लिए आईडीई में कोई विकल्प नहीं है।
किसी भी विचार अगर श्रेणी स्विफ्ट परियोजना में मौजूद है? या स्विफ्ट प्रोजेक्ट में समान कार्यक्षमता कैसे प्राप्त करें?
जवाबों:
स्विफ्ट में, आप Extensions
मौजूदा कक्षाओं, संरचनाओं और गणना प्रकारों में नई कार्यक्षमता जोड़ने के लिए उपयोग कर सकते हैं ।
वे मुख्य रूप से कुछ तरीकों से उद्देश्य-सी श्रेणियों से भिन्न होते हैं:
जैसा कि यह आज है, एक्सटेंशन कर सकते हैं:
विस्तार की घोषणा करने का मूल सिंटैक्स इस प्रकार है:
extension SomeType {
// new functionality to add to SomeType goes here
}
चेक एप्पल के प्रलेखन कैसे स्विफ्ट में एक्सटेंशन का उपयोग करने के बारे में अधिक जानकारी के लिए।
ऑब्जेक्टिव सी में उन्हें श्रेणियां कहा जाता था , लेकिन स्विफ्ट में उन्हें एक्सटेंशन कहा जाता है । दोनों का उद्देश्य मौजूदा वर्गों को उपवर्ग बनाने के बिना अतिरिक्त कार्यक्षमता प्रदान करना है।
मैंने दस्तावेज़ीकरण में एक्सटेंशन के बारे में पढ़ा था, लेकिन मुझे वास्तव में समझ नहीं आया कि मैं अपने प्रोजेक्ट का उपयोग कैसे करूं, जब तक कि मैं इस ट्यूटोरियल वीडियो ( YouTube संस्करण , गीथब स्रोत ) को नहीं देख लेता ।
यह कैसे करना है के वीडियो से लिया गया सारांश यहां दिया गया है।
प्रोजेक्ट नेविगेटर में राइट क्लिक करें और "नई फ़ाइल ..." चुनें
"स्विफ्ट फ़ाइल" चुनें
सम्मेलन का नाम फ़ाइल नाम को उस वर्ग के नाम के रूप में सहेजना है जिसे आप प्लस ("+" चिह्न के साथ) जो आप इसके लिए कर रहे हैं। उदाहरण के लिए, "UIImage + फसल"।
आपके द्वारा अभी बनाई गई नई स्विफ्ट फ़ाइल खोलें।
यदि आप एक का विस्तार कर रहे हैं तो आपको UIKit
(इसके बजाय Foundation
) आयात करना चाहिए UIView
। फिर extension
उस वर्ग नाम से पहले कीवर्ड का उपयोग करें जिसे आप विस्तारित करना चाहते हैं। फिर आप कक्षा में अपनी नई विधियाँ जोड़ सकते हैं। (ध्यान दें, एक्सटेंशन नए तरीकों को जोड़ने के लिए हैं, न कि मौजूदा तरीकों को ओवरराइड करने के लिए - इसलिए नाम।)
वीडियो में, उदाहरण एक ऐसी विधि को जोड़ना था जो छवि से एक चक्र को क्रॉप करता है और इसे एक सीमा देता है।
import UIKit
extension UIImage {
func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
// code to create the cropped circle with colored border
return newImage
}
}
पूर्ण उदाहरण के लिए यहां देखें ।
अब आप अपने कोड में कहीं भी उस वर्ग के लिए अपनी नई पद्धति का उपयोग कर सकते हैं, जैसे यह मानक वर्ग का हिस्सा था।
यहाँ वीडियो का उदाहरण है ( जीथब पर ):
import UIKit
class ViewController: UIViewController {
@IBOutlet var imageView : UIImageView = nil
override func viewDidLoad() {
super.viewDidLoad()
let img = imageView.image
imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20)
}
}
विधि cropToCircleWithBorderColor
का एक मानक हिस्सा नहीं है UIImage
, लेकिन जैसा कि आप देख सकते हैं, यह वैसे ही उपयोग किया जाता है जैसे यह थे।
स्विफ्ट में इसे एक्सटेंशन्स कहा जाता है ! इसकी जांच - पड़ताल करें
extension
चर को शामिल नहीं किया जा सकता है, जो चीजों को पूरी तरह से अलग बनाते हैं।
आप अपनी मौजूदा कक्षा में निम्नलिखित कोड का उपयोग कर सकते हैं
extension name{
func funcName(){
}
}
extension
।