//userRestoreObservable被訂閱時,會去server抓東西
//原本是在DataUpdate這個struct中寫disposeBag,setupInitialInfo完會釋放裡面的observable。
//但當userRestoreObservable的next closure做完,裡面的物件都被釋放掉,
於是setupInitialInfo的disposeBag也被釋放,就接不到server回傳時的callback。
//解決方法是把disposeBag改成外部注入,讓它被宣告在closure外部,這樣才可以保證裡面的closure不會先被釋放掉。
func fetchUserByRestoreInfo(restoreInfo: RestoreInfo, completion: (()->Void)?) {
let disposeBag = DisposeBag()
userRestoreObservable(restoreInfo).subscribeNext { (newUserObj) in
prettyLog(newUserObj.debugDescription)
var userDefault = self.userDefault
userDefault.userPackage = newUserObj
userDefault.isNewLounch = false
DataUpdate().setupInitialInfo(disposeBag)
completion?()
}.addDisposableTo(disposeBag)
}