Rxswift как вызвать 1 или более функций взамен другой функции

#swift #rx-swift

#swift #rx-swift

Вопрос:

Я использовал RxSwift для вызова другой функции при возврате первой функции. Для этого я попробовал этот код:

 func startSyncNow(_ call: CAPPluginCall,lastSyncTime: String) -> Observable<String> {
         return   createOrAlterTable(call)

            .flatMapLatest(){ query -> Observable<String> in
                let formschema = self.formSchemaToSQLite(call, lastSyncTime: lastSyncTime)
               return formschema
        }.flatMapLatest(){ query -> Observable<String> in
            let menuTable = self.menuTableRecord(call, lastSyncTime: lastSyncTime)
               return menuTable
        }
        .map { query -> String in
            return "Success"
       }
    }
    
    func  createOrAlterTable(_ call: CAPPluginCall) -> Observable<[[String:Any]]>{
    
     return Observable.just("Sucess")
    }
    
    func formSchemaToSQLite(_ call: CAPPluginCall,lastSyncTime : String) -> Observable<String> {
        return Observable.just("Sucess")
    }
    
    
    func menuTableRecord(_ call: CAPPluginCall,lastSyncTime:String) -> Observable<String>{
        return Observable.just("Sucess")
    }
  

Когда я отлаживаю этот код, я не могу попасть в точку отладки ни в formSchemaToSQLite, ни в recordsTOSqlite. Пожалуйста, объясните мне, чего мне не хватает

Комментарии:

1. Вам нужно подписаться на наблюдаемое.

2. @DanielT. не могли бы вы, пожалуйста, поделиться фрагментом кода, который будет работать, я пытался подписаться, но с ошибкой компилятора

3. Я рад опубликовать рабочий пример. Сначала мне нужно, чтобы вы предоставили пример кода, который все же компилируется. Приведенный выше пример кода не компилируется.

4. @DanielT, вот код, который будет скомпилирован, «

5. Он все равно не будет компилироваться…

Ответ №1:

Компилируется следующее, и при вызове example() функции вызываются все функции:

 struct CAPPluginCall { }

func example() {
    _ = startSyncNow(CAPPluginCall(), lastSyncTime: "before")
        .subscribe(onNext: { result in
            print(result)
        })
}

func startSyncNow(_ call: CAPPluginCall, lastSyncTime: String) -> Observable<String> {
    return createOrAlterTable(call)
        .flatMapLatest { query -> Observable<String> in
            let formschema = formSchemaToSQLite(call, lastSyncTime: lastSyncTime)
            return formschema
        }
        .flatMapLatest { query -> Observable<String> in
            let menuTable = menuTableRecord(call, lastSyncTime: lastSyncTime)
            return menuTable
        }
        .map { query -> String in
            return "Success"
        }
}

func createOrAlterTable(_ call: CAPPluginCall) -> Observable<[[String:Any]]>{
    return Observable.just([[:]])
}

func formSchemaToSQLite(_ call: CAPPluginCall,lastSyncTime : String) -> Observable<String> {
    return Observable.just("Sucess")
}


func menuTableRecord(_ call: CAPPluginCall,lastSyncTime:String) -> Observable<String>{
    return Observable.just("Sucess")
}