我试图运行的功能是:
func dateFromSection(section: Int) -> (startDate: NSDate, endDate: NSDate)?
如何使用以下命令运行它并在不使用调度函数的情况下捕获返回值?
performSelectorOnMainThread(aSelector: Selector, withObject: AnyObject?, waitUntilDone: Bool)
答案 0 :(得分:0)
如果你是绝对的,确定你已经在主线程上不,你可以这样做:
var dates: (startDate: NSDate, endDate: NSDate)?
dispatch_sync(dispatch_get_main_queue()) {
dates = someObject.dateFromSection(section)
}
答案 1 :(得分:0)
您为什么使用PerformSelectorOnMainThread
?您可以使用dispatch_get_main_queue
代替。
PerformSelectorOnMainThread
使用默认模式在主线程上调用接收器的方法。
dispatch_get_main_queue
返回绑定到主线程的默认队列。
在你的情况下,你应该把你的函数调用放在这样的dispatch_get_main_queue
中,这样你就可以得到你的返回值。
dispatch_async(dispatch_get_main_queue(), {
let ouptut = self.dateFromSection(YourDate)
// output contains your return value, which is a closure
})
如果要将回调反映在代码的其他部分中,可以创建此闭包的本地实例,并可以像这样为其指定返回值。否则,您可以创建一个全局实例,并可以分配哪些可以在其他类中使用。
class YourClass
{
//MARK: Local Variables
var yourDateClosure : (startDate: NSDate, endDate: NSDate)?
func yourFunctionName()
{
dispatch_async(dispatch_get_main_queue(), {
self. yourDateClosure = self.dateFromSection(YourDate)
})
}
}
答案 2 :(得分:0)
在这种情况下,您不应该使用performSelectorOnMainThread:withObject:waitUntilDone:
,因为无法从中捕获返回值。请改用dispatch_async
:
dispatch_async(dispatch_get_main_queue()) {
let dates = dateFromSection(section)
}