Creating threads in swift?

懵懂的女人 提交于 2019-12-04 08:37:30

问题


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:


  1. 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 use respondsToSelector:

  2. 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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!