在 firebase 函数中拥有自己的完成处理程序(自定义 class 方法)

own completion handler in firebase function (custom class method)

我想异步更新方法的一些初始值,但我找不到尊重 firebase 完成的方法,所以我想自己做一个,但没有运气,知道吗? (在下面的代码中,我试图更新 comlike 的值)

class POSTDATA {

var comcount : String
var comlike : Int
var post : getitems

init(comcount:String, comlike:Int, post:getitems) {

    self.post = post
    self.comlike = comlike
    self.comcount = comcount
    findComCount(){success in}
}

func findComCount(completionHandler: (Bool) -> ()) {

    let refComCount = Firebase (url: ("https://XXXXXX/COMCOUNTS/" + self.post.postid + "/comcount"))
    refComCount.observeEventType(.Value, withBlock: { snap in
        if snap.value is NSNull {
             self.comcount = "0"

        } else {
            if snap.value == nil {
                 self.comcount = "0"
            } else {
                 self.comcount = String( snap.value!)
            }
            }

        completionHandler(true)
    })

}

}

在 init 调用中进行异步操作很奇怪,您可以使用动态变量和 KVO 观察之类的东西:

class POSTDATA:NSObject { //Inherit your class from NSObject to allow KVO observing

        var comcount : String
        var comlike : Int
        var post : getitems

    dynamic var completed:Bool = false //Here you declare your dynamic var


        init(comcount:String, comlike:Int, post:getitems) {

            self.post = post
            self.comlike = comlike
            self.comcount = comcount
            findComCount();
        }

        func findComCount() {

            let refComCount = Firebase (url: ("https://XXXXXX/COMCOUNTS/" + self.post.postid + "/comcount"))
            refComCount.observeEventType(.Value, withBlock: { snap in
                if snap.value is NSNull {
                     self.comcount = "0"

                } else {
                    if snap.value == nil {
                         self.comcount = "0"
                    } else {
                         self.comcount = String( snap.value!)
                    }
                    }

                self.completed = true //Assign to it value 'true' when update i completed
            })

        }
        }

然后在你的viewController中你做这样的事情:

var postDataObject:POSTDATA = POSTDATA("String",0,getitemObj);

    override viewDidLoad() {
        super.viewDidLoad()
        postDataObject.addObserver(self, forKeyPath: "completed", options: NSKeyValueObservingOption, context: nil)
    }

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
     if (keyPath != nil){
        if(keyPath!=="completed"){
              //HERE YOU KNOW YOUR OBJECT HAS BEEN UPDATED
         }
     }
    }

    deinit {
        postDataObject.removeObserver(self, forKeyPath: "completed", context: nil)
    }