我在这里处理一个问题。我在Parse的一个表上进行查询(在一个函数内),我得到了一些目标。我将它们推入阵列。
在ViewDidLoad中,我有以下顺序
override func viewDidLoad() {
super.viewDidLoad()
refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl.addTarget(self, action: #selector(Images.refresh), forControlEvents: UIControlEvents.ValueChanged)
self.imagesCollView!.addSubview(refreshControl)
queryLikes() // it calls first the likes query
queryImages("") // and when the previous query has done, it should run this query.
}
并且在cellForItemAtIndexPath
我正在检查图像的对象id是否包含在对象的数组中,然后将按钮的背景从unliked更改为like。
到目前为止所有的好,但我也有一个类似的刷新功能
@IBAction func refreshButt(sender: AnyObject) {
queryLikes() //this first call to the query of likes table
searchBar.text = ""
categoryStr = ""
queryImages("") //and when the previous query is ready, it should run this query.
}
因此,当有人使用按钮刷新视图时,它会先加载第二个查询,然后加载第一个查询。
是否有任何工作示例向我展示如何首先运行queryLikes
运行以及何时运行queryImages
??
非常感谢!
答案 0 :(得分:3)
您可以通过使用回调和链接请求来实现此目的:
enum Result<T> {
case Success(T)
case Failure(NSError)
}
func queryLikes(completion: Result<Void> -> Void) {
if networkCallSuccess() { completion(.Success()) }
else { completion(.Failure(.Error)) }
}
queryLikes() { result in
switch result {
case .Success: queryImages()
case .Failure(let error): // Handle error
}
}
答案 1 :(得分:2)
这是处理这种情况的一种更简单的方法。但我建议Diogo Antunes
而不是这种方法的答案,如果你是初学者,你可以选择这个。
func queryLikes(completion: (success : Bool) -> ()) {
// After putting your statements
completion(success: true)
}
如果您正在处理函数内的任何条件,请尝试此操作。
func queryLikes(completion: (success : Bool) -> ()) {
if condition {
completion(success: true)
}
else {
completion(success: false)
}
}
在函数内部使用for循环。
func queryLikes(completion: (success : Bool) -> ()) {
let objects : [Int] = []
for object in 0..<objects.count
{
if object == objects.endIndex
{
completion(success: true)
}
}
}