我想在pullData()完成后运行loadViews(),我想知道做这个的最好方法是什么?我想设置10秒的超时时间,如果可能的话,我可以显示网络错误。从我读过的内容来看,GCD看起来就是实现这一目标的方式,但我对它的实现感到困惑。谢谢你提供的所有帮助!运行一个接一个的函数
//1
pullData()
//2
loadViews()
我想在pullData()完成后运行loadViews(),我想知道做这个的最好方法是什么?我想设置10秒的超时时间,如果可能的话,我可以显示网络错误。从我读过的内容来看,GCD看起来就是实现这一目标的方式,但我对它的实现感到困惑。谢谢你提供的所有帮助!运行一个接一个的函数
//1
pullData()
//2
loadViews()
你需要的是完成处理程序与完成块。
它非常简单的创建一个:
func firstTask(completion: (success: Bool) -> Void) {
// Do something
// Call completion, when finished, success or faliure
completion(success: true)
}
,并使用您完成块这样的:
firstTask { (success) -> Void in
if success {
// do second task if success
secondTask()
}
}
我有类似的情况,一旦数据从Parse服务器中提取,我不得不初始化视图。我用下面的:
func fetchQuestionBank(complete:()->()){
let userDefault = NSUserDefaults.standardUserDefaults()
let username = userDefault.valueForKey("user_email") as? String
var query = PFQuery(className:"QuestionBank")
query.whereKey("teacher", equalTo: username!)
query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
var questionTitle:String?
var options:NSArray?
for (index, object) in enumerate(objects) {
questionTitle = object["question_title"] as? String
options = object["options"] as? NSArray
var aQuestion = MultipleChoiceQuestion(questionTitle: questionTitle!, options: options!)
aQuestion.questionId = object.objectId!
InstantlyModel.sharedInstance.questionBank.append(aQuestion)
}
complete()
}
}else{
println(" Question Bank Error \(error) ")
}
}
}
这就是你所谓的方法:
self.fetchQuestionBank({() ->() in
//Once all the data pulled from server. Show Teacher View.
self.teacherViewController = TeacherViewController(nibName: "TeacherViewController", bundle: nil)
self.view.addSubview(self.teacherViewController!.view)
})
可以实现这样的: -
func demo(completion: (success: Bool) -> Void) {
// code goes here
completion(success: true)
}
你或许应该简单地将loadView作为回调/完成块传递给pullData,以便每当pullData决定完成时拉它就可以cal它。 – luk2302
我该如何去做呢?如果我去那条路线,我还可以实现一个计时器吗? – Opei
例如,通过搜索“swift completion block” - 您的问题通常过于宽泛,并且会主要吸引我的评论等基于意见的答案。你将不得不展示更多的上下文,正确地解释*想要达到的目标:计时器或完成后运行几乎相反。此外,你应该显示你到目前为止尝试过的。 – luk2302