2014-07-02 27 views
6

मैं तेजी से धागे को फैलाने की कोशिश कर रहा हूं। तो मेरे पास यह लाइन है:तेजी से धागे बनाना?

। । ।

let thread = NSThread(target: self, selector: doSomething(), object: nil) 

। । ।

doSomething कक्षा के दायरे में एक कार्य है। "() Init के लिए एक अधिभार नहीं पा सके कि आपूर्ति तर्क स्वीकार करता है"

मैं यहाँ क्या याद आ रही है:

कि लाइन इस त्रुटि देता है? क्या मैं तेजी से नया धागा बना सकता हूं?

उत्तर

12

Xcode 7.3 और स्विफ्ट 2.2 के रूप में, आप विशेष रूप #selector(...) का उपयोग जहां ऑब्जेक्टिव-सी @selector(...) का प्रयोग करेंगे कर सकते हैं:

let thread = NSThread(target:self, selector:#selector(doSomething), object:nil) 
+0

आप इसे कैसे करना होगा और यदि 'doSomething' एक तर्क (का कहना प्रकार' NSString') की आवश्यकता? – Matt

+0

यही है कि 'ऑब्जेक्ट' तर्क क्या है। –

+0

मैंने कोशिश की, लेकिन मुझे 'NSInvalidArgumentException' प्राप्त हो रहा है:' [NSThread initWithTarget: selector: object:]: लक्ष्य चयनकर्ता को लागू नहीं करता है। यह स्पष्ट रूप से मेरे कार्य के नाम को पहचान नहीं है। (क्या मुझे इसे एक नए प्रश्न के रूप में पोस्ट करना चाहिए?) – Matt

4

NSThread एक चयनकर्ता लेता है के रूप में यह दूसरा पैरामीटर है। आप इस तरह स्विफ्ट में स्ट्रिंग्स के रूप में ऑब्जेक्टिव-सी चयनकर्ताओं का वर्णन कर सकते हैं:

let thread = NSThread(target: myObj, selector: "mySelector", object: nil) 

स्विफ्ट कार्यों बराबर उद्देश्य-सी तरीकों हालांकि नहीं कर रहे हैं। आप एक तेज कक्षा में एक विधि है, तो आप यह एक चयनकर्ता के रूप में उपयोग कर सकते हैं अगर आप वर्ग पर @objc विशेषता का उपयोग:

@objc class myClass{ 
    func myFunc(){ 
    } 
} 

var myObj = myClass() 
let thread = NSThread(target: myObj, selector: "myFunc", object: nil) 
0
  1. जब हम लक्ष्य पर एक चयनकर्ता कहते हैं, हम जांच होनी चाहिए यदि लक्ष्य मौजूद है और यह चयनकर्ता को जवाब देता है। NSObject से विस्तार है कि या यह उपवर्गों respondsToSelector:

  2. उपयोग कर सकते हैं अगर आप अधिक से अधिक 2 पैरामीटर आप एक NSDictionary का उपयोग मापदंडों स्टोर करने के लिए कर सकते हैं केवल वर्ग।

    पूर्व:

    //this code is in Objective-C but the same code should exist in Swift 
    
    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:object1, @"key1", object2, @"key2",nil]; 
    

तो चयनकर्ता की पैरामीटर के पास 'परम':

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