问题
I am trying to spawn a thread in swift. So I have this line:
. . .
let thread = NSThread(target: self, selector: doSomething(), object: nil)
. . .
doSomething is a function within the scope of the class.
That line gives this error: "could not find an overload for init() that accepts the supplied arguments"
What am I missing here? Ho can I create a new thread in swift?
回答1:
As of Xcode 7.3 and Swift 2.2, you can use the special form #selector(...)
where Objective-C would use @selector(...)
:
let thread = NSThread(target:self, selector:#selector(doSomething), object:nil)
回答2:
NSThread takes a selector as it's second parameter. You can describe Objective-C selectors as Strings in Swift like this:
let thread = NSThread(target: myObj, selector: "mySelector", object: nil)
Swift functions aren't equivalent objective-c methods though. If you have a method in a swift class, you can use it as a selector if you use the @objc attribute on the class:
@objc class myClass{
func myFunc(){
}
}
var myObj = myClass()
let thread = NSThread(target: myObj, selector: "myFunc", object: nil)
回答3:
When we call a selector on a target, we should check if the target exists and it responds to the selector. Only class that extend from
NSObject
or it's subclasses can userespondsToSelector:
You can use a
NSDictionary
to store parameters if you have more than 2 parameters.Ex:
//this code is in Objective-C but the same code should exist in Swift NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:object1, @"key1", object2, @"key2",nil];
then pass 'params' to parameter of selector:
来源:https://stackoverflow.com/questions/24541459/creating-threads-in-swift