2015-03-27 8 views
6

क्या इसे एनएसटीमर से स्थिर विधि कॉल करने की अनुमति है? संकलक इस अनुमति नहीं दी जाएगी, कॉल में गुप्त "अतिरिक्त तर्क 'चयनकर्ता' के साथ शिकायत कर।एनएसटीमर से एक स्थिर विधि को कॉल करना। क्या यह संभव है?

struct MyStruct { 
     static func startTimer() { 
      NSTimer.scheduledTimerWithTimeInterval(1.0, target: MyStruct.self, selector: "doStuff", userInfo: nil, repeats: true) 
     } 

     static func doStuff() { 
      println("Doin' it.") 
     } 
    } 

    MyStruct.startTimer() 

लेकिन निश्चित रूप से, यह ठीक काम करता है ...

class MyClass { 
    func startTimer() { 
     NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "doStuff", userInfo: nil, repeats: true) 
    } 

    func doStuff() { 
     println("Doin' it.") 
    } 
} 

var instanceOfClass = MyClass() 
instanceOfClass.startTimer() 

मैं सिर्फ वाक्य रचना है गलत है, या यह अनुमति दी है नहीं?

उत्तर

3

NSTimer क्रम गतिशील विधियां प्रारंभ करने में ऑब्जेक्टिव-सी क्रम का इस्तेमाल करता है। जब एक struct घोषित, आप स्विफ्ट क्रम का उपयोग कर रहे हैं, इसलिए यह संभव NSTimer सहयोग करने के लिए नहीं है। संरचनाएं अलग fr ओम कक्षाएं, और आप उनके बारे में अधिक पढ़ सकते हैं here

इसके अलावा, एक static समारोह, ऑब्जेक्टिव-सी में एक वर्ग विधि के बराबर है ताकि यदि अपने मूल उद्देश्य था उसके बाद निम्न पर्याप्त होना चाहिए:

class MyClass: NSObject { 
    class func startTimer() { 
     NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "doStuff", userInfo: nil, repeats: true) 
    } 

    class func doStuff() { 
     println("Doin' it.") 
    } 
} 

MyClass.startTimer() 
+1

मैं लगभग समान कोड है, और यह करता है काम नहीं। वास्तव में, अगर मैं इस सटीक कोड में पेस्ट करता हूं, तो यह काम नहीं करता है। 'अपरिचित चयनकर्ता' ... किसी के लिए 'कक्षा' का उपयोग कर रहा है? – SimplGy

+0

@SimplGy: विशेषता '@ objc' के साथ अपने फ़ंक्शन को उपसर्ग करने का प्रयास करें। –

+2

नोट: आपके क्लास func चयनकर्ता को खोजने में सक्षम होने के लिए आपको 'NSObject' से उत्तराधिकारी होना चाहिए। यदि आप नहीं करते हैं, तो आपको रनटाइम क्रैश 'अपरिचित चयनकर्ता' मिलेगा। – SimplGy

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

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