Ios 未调用RxSwift订阅块

Ios 未调用RxSwift订阅块,ios,swift,rx-swift,Ios,Swift,Rx Swift,我在玩RxSwift,我被一个简单的玩具程序卡住了。我的程序基本上包含一个模型类和一个viewcontroller。该模型包含一个在异步网络调用后在主队列上更新的可观察对象,viewcontroller在viewDidLoad()中订阅。AppDelegate初始化模型并将其传递给ViewController并触发网络请求 class GalleryModel { var galleryCount: BehaviorSubject<Int> init() {

我在玩RxSwift,我被一个简单的玩具程序卡住了。我的程序基本上包含一个模型类和一个viewcontroller。该模型包含一个在异步网络调用后在主队列上更新的可观察对象,viewcontroller在viewDidLoad()中订阅。AppDelegate初始化模型并将其传递给ViewController并触发网络请求

class GalleryModel {

    var galleryCount: BehaviorSubject<Int>

    init() {
        galleryCount = BehaviorSubject.init(value:0)
    }

    func refresh() {
         doAsyncRequestToAmazonWithCompletion { (response) -> AnyObject! in
             var counter = 0
             //process response
             counter = 12

             dispatch_async(dispatch_get_main_queue()) {
                self.galleryCount.on(.Next(counter))
             }
             return nil
        }
    }

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    var galleryModel: GalleryModel?

    override func viewDidLoad() {
        super.viewDidLoad()
        galleryModel?.galleryCount.subscribe { e in
            if let gc = e.element {
               self.label.text = String(gc)
            }
        }
   }
}

class AppDelegate: UIResponder, UIApplicationDelegate {
    var galleryModel: GalleryModel?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {        
        //do amazon setup        
        galleryModel = GalleryModel()
        if let viewController = window?.rootViewController as? ViewController {
            viewController.galleryModel = GalleryModel()
        }    
        return true
    }

    func applicationDidBecomeActive(application: UIApplication) {
        galleryModel?.refresh()
    }
类厨房模型{
var galleryCount:行为主体
init(){
galleryCount=BehaviorSubject.init(值:0)
}
func刷新(){
doAsyncRequestToAmazonWithCompletion{(响应)->中的任意对象
变量计数器=0
//过程响应
计数器=12
dispatch\u async(dispatch\u get\u main\u queue()){
打开(.Next(计数器))
}
归零
}
}
类ViewController:UIViewController{
@IBVAR标签:UILabel!
var galleryModel:galleryModel?
重写func viewDidLoad(){
super.viewDidLoad()
galleryModel?.galleryCount.subscribe{e in
如果让gc=e.element{
self.label.text=字符串(gc)
}
}
}
}
类AppDelegate:UIResponder、UIApplicationLegate{
var galleryModel:galleryModel?
func应用程序(应用程序:UIApplication,didFinishLaunchingWithOptions启动选项:[NSObject:AnyObject]?)->Bool{
//亚马逊设置吗
galleryModel=galleryModel()
如果让viewController=window?.rootViewController作为viewController{
viewController.galleryModel=galleryModel()
}    
返回真值
}
func ApplicationIDBecMeactive(应用程序:UIApplication){
galleryModel?.refresh()
}
标签只更新了一次,显示为“0”。我希望标签更新两次,第一次更新后显示为“0”,显示为“12”在处理网络请求后的第二次更新之后。dispatch_async块中的断点被命中,但galleryCount似乎丢失了它的观察者。有人知道发生了什么或者如何调试吗


如果有人感兴趣,最好是这样读。这是一个重构错误,在重命名变量后,我停止将可观察对象传递给ViewController。相反,我创建了一个新的…facepalm是一些有用的RxSwift订阅片段(日语)

例如,要订阅不同的事件:

let source: Observable<Int> = create { (observer: ObserverOf<Int>) in
    sendNext(observer, 42)
    sendCompleted(observer)
    return AnonymousDisposable {
        print("disposed")
    }
}

let subscription = source.subscribe { (event: Event<Int>) -> Void in
    switch event {
    case .Next(let element):
        print("Next: \(element)")
    case .Completed:
        print("Completed")
    case .Error(let error):
        print("Error: \(error)")
    }
}
let source:observate=create{(observator:observof)in
sendNext(观察员,42岁)
已完成发送(观察员)
一次性退货{
打印(“已处置”)
}
}
让subscription=source.subscripte{(事件:event)->Void in
切换事件{
case.Next(let元素):
打印(“下一步:\(元素)”)
案件.已完成:
打印(“已完成”)
案例错误(let Error):
打印(“错误:\(错误)”)
}
}

清理和构建为我解决了问题

你能确认调用了
GalleryModel
中的On Next吗?问题是RxSwift是如何编写的,我的意思是,一旦调用了
.On(.Error())
,它就会删除观察者,并且无法调用
.On(.Next())
再次。唯一的方法是创建一个新的
viewModel
实例,然后再次调用
subscribe
。我真的很讨厌这个库{>_