我想在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