在swift中创建线程?

时间:2014-07-02 21:39:09

标签: ios swift nsthread

我试图在swift中生成一个线程。 所以我有这句话:

。 。

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

。 。

doSomething是该类范围内的一个函数。

该行给出了此错误: "找不到接受提供的参数"

的init()的重载

我在这里缺少什么?我可以在swift中创建一个新线程吗?

3 个答案:

答案 0 :(得分:13)

从Xcode 7.3和Swift 2.2开始,您可以使用Objective-C将使用#selector(...)的特殊形式@selector(...)

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

答案 1 :(得分:4)

NSThread将选择器作为其第二个参数。你可以在Swift中将Objective-C选择器描述为字符串,如下所示:

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

Swift函数不是等效的objective-c方法。如果在swift类中有一个方法,如果在类上使用@objc属性,则可以将它用作选择器:

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

var myObj = myClass()
let thread = NSThread(target: myObj, selector: "myFunc", object: nil)

答案 2 :(得分: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]; 
    
  3. 然后将'params'传递给选择器的参数: