मैं स्विफ्ट में कक्षा के तरीके / गुण कैसे बना सकता हूं?


97

उद्देश्य-सी में कक्षा (या स्थिर) विधियाँ +घोषणाओं का उपयोग करके पूरी की गईं ।

@interface MyClass : NSObject

+ (void)aClassMethod;
- (void)anInstanceMethod;

@end

स्विफ्ट में यह कैसे हासिल किया जा सकता है?

जवाबों:


152

उन्हें टाइप प्रॉपर्टीज़ और टाइप मेथड्स कहा जाता है और आप classया staticकीवर्ड्स का इस्तेमाल करते हैं ।

class Foo {
    var name: String?           // instance property
    static var all = [Foo]()    // static type property
    class var comp: Int {       // computed type property
        return 42
    }

    class func alert() {        // type method
        print("There are \(all.count) foos")
    }
}

Foo.alert()       // There are 0 foos
let f = Foo()
Foo.all.append(f)
Foo.alert()       // There are 1 foos

5
मुझे नहीं लगता कि यह प्लेग्राउंड तक सीमित है, यह किसी ऐप में संकलित नहीं है।
एरिक केबर

@ErikKerber पता करने के लिए अच्छा है, अभी तक उन्हें जरूरत नहीं है इसलिए अपने आप को परीक्षण नहीं किया है, धन्यवाद।
पास्कल

Xcode 6.2 अभी भी 'क्लास वर्जन varName: टाइप' के किसी भी रूप के खिलाफ 'वर्ग चर अभी तक समर्थित नहीं' की रिपोर्ट करता है।
अली बीडल

स्विफ्ट 2.0+ में, आपको classफ़ंक्शन या कंप्यूट प्रकार की संपत्ति से पहले कीवर्ड की आवश्यकता नहीं है ।
गोविंद राय

20

उन्हें Swift में टाइप प्रॉपर्टीज़ और टाइप मेथड्स कहा जाता है और आप क्लास कीवर्ड का उपयोग करते हैं।
कक्षा विधि या टाइप विधि को तेजी से घोषित करना:

class SomeClass 
{
     class func someTypeMethod() 
     {
          // type method implementation goes here
     }
}

उस विधि तक पहुँच:

SomeClass.someTypeMethod()

या आप स्विफ्ट में तरीके का उल्लेख कर सकते हैं


आपको बहुत - बहुत धन्यवाद! इसका उद्देश्य ऑब्जेक्टिव-सी में एक NSObject क्लास से भी आसान है और जो पहले से ही सेटअप के लिए बहुत आसान था।
सुपरटेकनोफॉफ़

14

घोषणा के साथ रोकें कि classक्या यह एक वर्ग है, या staticयदि यह एक संरचना है।

class MyClass : {

    class func aClassMethod() { ... }
    func anInstanceMethod()  { ... }
}

क्या आपको funcयहां कीवर्ड की आवश्यकता नहीं है?
जेमी फॉरेस्ट

1
बेशक। भीड़ भरी बस में खड़े रहते हुए सवालों के जवाब देने के लिए मेरी सेवा करता है। सही किया।
एनालॉग फाइल

4

स्विफ्ट 1.1 में वर्ग गुण नहीं हैं। आप इसे एक क्लोजर क्लास प्रॉपर्टी का उपयोग करके लागू कर सकते हैं जो क्लास ऑब्जेक्ट से जुड़ी एक संबद्ध वस्तु को लाती है। (केवल NSObject से प्राप्त कक्षाओं में काम करता है।)

private var fooPropertyKey: Int = 0  // value is unimportant; we use var's address

class YourClass: SomeSubclassOfNSObject {

    class var foo: FooType? {  // Swift 1.1 doesn't have stored class properties; change when supported
        get {
            return objc_getAssociatedObject(self, &fooPropertyKey) as FooType?
        }
        set {
            objc_setAssociatedObject(self, &fooPropertyKey, newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
        }
    }

    ....
}

मैं स्विफ्ट सीख रहा हूं और सोच रहा हूं कि क्या आप स्विफ्ट श्रेणी के उदाहरणों से जुड़ी वस्तुओं को संलग्न कर सकते हैं। ऐसा लगता है कि उत्तर "प्रकार" है। (हां, लेकिन केवल ऐसी वस्तुएं जो NSObject का एक उपवर्ग हैं।) मेरे लिए यह सुलझाने के लिए धन्यवाद। (वोट)
डंकन सी

4

यदि यह एक फ़ंक्शन है, या स्थैतिक के साथ वर्ग के साथ घोषणा को रोकें या अगर यह एक संपत्ति है।

class MyClass {

    class func aClassMethod() { ... }
    static func anInstanceMethod()  { ... }
    static var myArray : [String] = []
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.