在swift中创build线程?
我正试图迅速产生一个线程。 所以我有这条线:
。 。 。
let thread = NSThread(target: self, selector: doSomething(), object: nil)
。 。 。
doSomething是该类范围内的一个函数。
该行出现此错误:“找不到接受提供的参数的init()的重载”
我在这里错过了什么? 何可以快速创build一个新的线程?
从Xcode 7.3和Swift 2.2开始,可以使用Objective-C使用@selector(...)
的特殊forms#selector(...)
@selector(...)
:
let thread = NSThread(target:self, selector:#selector(doSomething), object:nil)
NSThread将select器作为第二个参数。 你可以像下面这样描述Objective-Cselect器作为Swift中的string:
let thread = NSThread(target: myObj, selector: "mySelector", object: nil)
尽pipeSwift函数并不等价于objective-c方法。 如果你有一个Swift类中的方法,如果你在类中使用@objc属性,你可以使用它作为select器:
@objc class myClass{ func myFunc(){ } } var myObj = myClass() let thread = NSThread(target: myObj, selector: "myFunc", object: nil)
-
当我们在目标上调用select器时,我们应该检查目标是否存在,并响应select器。 只有从
NSObject
或其子类扩展的类才可以使用respondsToSelector:
-
如果您有两个以上的参数,可以使用
NSDictionary
存储参数。例如:
//this code is in Objective-C but the same code should exist in Swift NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:object1, @"key1", object2, @"key2",nil];
然后将“params”传递给select器的参数: