2014-12-08 7 views
13

क्या एक स्तरीय फ़ंक्शन को स्विफ्ट में एक एक्सटेंशन में परिभाषित करना संभव है, जैसे कि एक उद्देश्य-सी श्रेणी में आप क्लास फ़ंक्शंस को भी परिभाषित कर सकते हैं?स्विफ्ट एक्सटेंशन (श्रेणी) में कक्षा फ़ंक्शन

में ऑब्जेक्टिव-सी

उदाहरण

@implementation UIColor (Additions) 

+ (UIColor)colorWithHexString:(NSString *)hexString 
{ 
    // create color from string 
    // ... some code 
    return newColor; 
} 

@end 

क्या तेज में बराबर हो सकता है?

+0

क्या हम हमेशा कार्य फ़ंक्शंस के रूप में फ़ंक्शंस का उपयोग नहीं करेंगे, जब तक कि हम आवृत्ति चर/गणना गुणों का उपयोग न करें? स्विफ्ट एक्सटेंशन बनाने के तरीके के विवरण के लिए – brainray

+0

[यह SO उत्तर] देखें (http://stackoverflow.com/a/31026358/3681880)। – Suragch

उत्तर

22

हां, यह संभव और बहुत समान है, मुख्य अंतर यह है कि स्विफ्ट एक्सटेंशन का नाम नहीं है।

extension UIColor { 
    class func colorWithHexString(hexString: String) -> UIColor { 
     // create color from string 
     // ... some code 
     return newColor 
    } 
} 
+4

एक कस्टम प्रारंभकर्ता त्वरित स्विफ्टियर समाधान हो सकता है, क्योंकि ऑब्जेक्टिस-सी फैक्ट्री विधियों को मैप किया गया है। –

+1

यही वह है जो मैं अभी करूँगा। सलाह के लिये धन्यवाद। –

5

रिकॉर्ड के लिए।

import UIKit 

extension UIColor { 
    convenience init(hexString:String) { 

     // some code to parse the hex string 
     let red = 0.0 
     let green = 0.0 
     let blue = 0.0 
     let alpha = 1.0 

     self.init(red:red, green:green, blue:blue, alpha:alpha) 
    } 
} 

अब मैं उपयोग कर सकते हैं:: यहाँ के ऊपर समाधान के लिए कोड है

तेज:

let clr:UIColor = UIColor(hexString:"000000") 

और सैद्धांतिक रूप से मैं उद्देश्य-सी में उपयोग करने के लिए सक्षम होना चाहिए:

UIColor *clr = [UIColor colorWithHexString:@"000000"]; 
+1

यह भी एक नोट है कि आप 'init' को अक्षम कर सकते हैं जब अमान्य' हेक्सस्ट्रिंग 'प्रदान किया जाता है। – Kirsteins

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