函数内的代码序列 - Swift

时间:2015-06-12 09:21:30

标签: ios xcode swift

我有一个功能,当点击一个像按钮时会触发,比如facebook" like"纽扣。我有第一部分,第二部分如下所述。问题是,当代码运行时,代码中没有序列。例如,我需要运行第一部分然后运行第二部分,但有时第二部分首先运行。如何添加序列作为优先级运行?

 @IBAction func likeBtn(sender: AnyObject) {


         /* first part */        

        if likeTitle == "Like" {

       var likeObj = PFObject(className: "likes")

        likeObj["userName"] = PFUser.currentUser()!.username
        likeObj["tweetObjectId"] = objectid.text

        likeObj.save()

        likeBtn.setTitle("Liked", forState: UIControlState.Normal)

        }


        /* second part */



            var likeCount = PFQuery(className: "likes")
            likeCount.whereKey("ObjectId", equalTo: objectid.text!)
            var likedUsersCount = likeCount.countObjects()

            var addLikeCountQuery = PFQuery(className: "comments")
            addLikeCountQuery.whereKey("objectId", equalTo: objectid.text!)

            addLikeCountQuery.findObjectsInBackgroundWithBlock {

                (objects: [AnyObject]?, error: NSError?) -> Void in

                for object in objects! {

                    var ob:PFObject = object as! PFObject

                    ob["numberOfLikes"] = likedUsersCount

                    ob.save()
                }

        }


    }

1 个答案:

答案 0 :(得分:0)

第一部分只会在likeTitle == "Like"时运行,所以如果likeTitle != "Like"那么你的第一部分就不会运行,但第二部分会一直运行。

另一个问题是(关键字在这里是"可以" :-))在你的第一部分,你打电话给likeObj.save()。我不知道你的代码是什么样的,但这可能是异步的,这意味着它将保存在后台线程中需要保存的任何内容以不阻塞主线程,同时你的第二部分代码将是继续在主线程上运行。

如果是这种情况,那么也许您应该考虑在保存操作完成时执行某种回调,并在该回调中,您调用第二部分。