Tag: rx swift

RXSwift绑定返回意外地发现零,而解包一个可选的值

我是MVVM和RxSwift的初学者,我想在我的下一个项目中实现它。 目前,我正在处理我的login模块,一切都看起来不错,但每次运行我的应用程序时,它会触发一个错误时绑定文本字段到我的ViewModel说“意外地发现零,而解包可选值”。 有人能帮我摆脱它吗? 以下是我如何做到的: class LoginViewController: UIViewController { @IBOutlet weak var emailTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! @IBOutlet weak var loginButton: UIButton! private var loginViewModel: UserLoginViewModel! private let disposeBag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() emailTextField.rx.text.orEmpty .bind(to: loginViewModel.emailAdd) .disposed(by: disposeBag) <—- Displays "Unexpectedly found nil while unwrapping an Optional value" passwordTextField.rx.text.orEmpty .bind(to: loginViewModel.password) […]

使用RxSwift重新载入Tableview

我正在使用RxSwift进行tableview。 每次从api获取数据后,我都需要重新载入表格,但是我没有做到这一点。 我找不到任何解决scheme。 任何人都可以帮忙吗? 我有一个从Api的响应获得的地方数组。我已经使用这个代码在视图中加载,但是当数组更新时不会调用它。

调用API客户端的networking请求的通用方法

我已经提供了我的firebase API客户端的代码。 使用generics,使用json直接初始化任何实体是否聪明? 要下载列表,我需要一个指示器让我知道,我正在请求一个实体列表 – 因为有不同的实现,所以我添加了一个GETALL的情况下,我的HTTPMethod枚举,这是不好的,和一些会混淆到其他? 我也觉得这是不灵活的,因为如果嵌套在不同的层次上,我不能得到所需的实体。 希望这是有道理的。 因此,这可能不遵循开放/封闭的原则,因为如果我必须将我的实体嵌套在Firebase中,则不同的是,必须再次更改FirebaseAPI内的实现。 从我见过的开源代码中,我还没有看到像这样devise的rest客户端,也不知道我是否使用了反模式。 任何帮助或指导,使这个维护。 class FirebaseAPI { private let session: URLSession init() { self.session = URLSession.shared } /// Responsible for Making actual API requests & Handling response /// Returns an observable object that conforms to JSONable protocol. /// Entities that confrom to JSONable just means they can be […]

无法通过自定义DelegateProxy和Protocol接收事件

我尝试将DifficultyViewDelegate的委托迁移到observable。 这是我的DifficultyViewDelegate: @objc protocol DifficultyViewDelegate: class { func levelDidIncrease() func levelDidDecrease() } 我的难点: weak var delegate: DifficultyViewDelegate? @IBAction func decreaseLevel(_ sender: Any) { delegate?.levelDidDecrease() } @IBAction func increaseLevel(_ sender: Any) { delegate?.levelDidIncrease() } 这是我的RxDifficultyViewDelegateProxy class RxDifficultyViewDelegateProxy: DelegateProxy, DelegateProxyType { static func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let difficultyView: DifficultyView = object as! DifficultyView return […]

Rx扫描(),不能从种子和另一个可观察的地方生成可观察的

我有一个种子值Triangle (Bool)和一个观察值发出Circle (Int)值。 我的目的是每次从该可观察值发出一个值时生成一个新的可观测值(Triangle, Circle) ,将Triangle值转换为否定当前值。 这是我的大理石图: 但是我无法实现,我不知道scan是否是正确的操作符。 这是我的代码: typealias Triangle = Bool typealias Circle = Int func scan() { let triangle: Triangle = false circleObservable .scan(triangle, accumulator: ({ (triangle, circle) -> (Triangle, Circle) in return (!triangle, circle) })) } 这会产生一个编译器错误: 无法将types'(Triangle,Circle) – >(Triangle,Circle)'(aka'(Bool,Int) – >(Bool,Int)')的值转换为期望的参数types'(_,_) – > _' 谢谢!

RxSwift,RxCocoa和UITableview

我有一个使用RxSwift实现UITableView的问题。 我尝试使用下面的代码将一个模型数组的observable绑定到表项。 models.bind(to: self.tableView.rx.items(cellIdentifier: "Cell", cellType: ModelTableViewCell.self 。 但是当我这样做给我以下错误:inputType 'inout UITableView' does not conform to protocol 'ReactiveCompatible' ,我知道错误不能正确,因为NSObject扩展ReactiveCompatible,所以UITableView也。 另外,我的项目代码与RxSwiftCommunity上显示的示例并没有太大的区别 我创build了一个有错误的小例子项目。

如何从`MoyaError`获取错误statusCode?

我正在使用Moya , Moya_ModelMapper和RxSwift来执行networking请求。 这是我的示例代码: let provider = RxMoyaProvider<MyEndpoint>() let observable: Observable<RegistrationResponse> = provider.request(.register(firstName: "", lastName: "", email: "", password: "")).mapObject(type: RegistrationResponse.self) observable.subscribe { [weak self] (event: Event<RegistrationResponse>) in switch event { case .next(let response): print(response) case .error(let error): print(error) case .completed: break } } 一切工作正常,但我不知道如何得到一个错误代码,当我收到例如从服务器的409状态码响应types。 如果我打印错误,我会得到: jsonMapping(Status Code: 409, Data Length: 0) 但我不知道如何通过代码获取这个状态码。 错误是一个枚举types的MoyaError 。 […]

如何退订RxSwift中的Observable?

我想退订RxSwift中的Observable。 为了做到这一点,我曾经把一次性设置为零。 但是在我看来,在更新到RxSwift 3.0.0-beta.2之后,这个技巧是行不通的,我不能退订Observable: //This is what I used to do when I wanted to unsubscribe var cancellableDisposeBag: DisposeBag? func setDisposable(){ cancellableDisposeBag = DisposeBag() } func cancelDisposable(){ cancellableDisposeBag = nil } 所以可能有人可以帮助我如何正确退订Observable?

如何将多个观察者绑定到一个ControlProperty

我需要将slider.rx.value绑定到2个具有不同映射的观察者。 slider.rx.value.map { [unowned self] in self.formatter.string(from: NSNumber(value: $0)) ?? "" } .bindTo(textFieldAlpha.rx.text) .addDisposableTo(disposeBag) slider.rx.value.map { Enhance.Global(alpha: $0) } .bindTo(enhance) .addDisposableTo(disposeBag) 但我似乎只有最后的约束力的作品。 如何做到这一点?

链接依赖观察

我需要创build依赖的API调用,其中第二个需要第一个返回的值。 首先想到的是使用flatMap ApiManager.shared .createReport(report: report) .flatMap { (report) -> Observable<Report> in return ApiManager.shared.createReportStep(reportID: report.ID) } createReport返回Observable<Report> ,在成功调用返回更新后的Report模型(带ID)之后,我需要调用API来创build报告步骤,其中需要report.ID 。 一切看起来和工作正常的代码,但是当我需要在每个步骤( createReport和createReportStep )后都需要做些事情时,问题就出现了。 我把代码放在onNext块中,但是在两个步骤完成之后它只被调用一次。 两步之后有没有办法接收onNext信号? 我可以使用这样的东西: ApiManager.shared .createReport(report: report) .concat(ApiManager.shared.createReportStep(reportID: report.ID)) 哪些会emmit像我想要的两个信号,但是,然后再次从哪里得到更新report.ID来传递给createReportStep ?