标签: rx-cocoa

RxSwift基于变量构建一个Observable

我正在尝试构建一个Observable,它将根据Variable的值输出一个值.

像这样的东西:

let fullName = Variable<String>("")
let isFullNameOKObs: Observable<Bool>

isFullNameOKObs = fullName
            .asObservable()
            .map { (val) -> Bool in
                // here business code to determine if the fullName is 'OK'
                let ok = val.characters.count >= 3
                return ok
            }
Run Code Online (Sandbox Code Playgroud)

不幸的是,map func中的bloc永远不会被调用!

这背后的原因是:

  1. fullName变量绑定到UITextField,并使用RxSwift示例中定义的双向运算符< - >.
  2. 将观察到isFullNameOKObs Observable 隐藏或显示我的ViewController的提交按钮.

任何帮助将不胜感激.

谢谢

该模型

class Model {

    let fullName = Variable<String>("")
    let isFullNameOKObs: Observable<Bool>

    let disposeBag = DisposeBag()

    init(){

        isFullNameOKObs = fullName
            .asObservable()
            .debug("isFullNameOKObs")
            .map { (val) -> Bool in
                let ok …
Run Code Online (Sandbox Code Playgroud)

observable ios swift rx-swift rx-cocoa

7
推荐指数
1
解决办法
3399
查看次数

使用 RxSwift 的 UIRefreshControl

您好,我正在尝试使 UIRefreshControl 与 RxSwift 一起使用。因此,我使用RxSwift 示例中的活动指示器。

在我的 viewModel 中,我有以下函数和变量来获取我的数据。

// MARK: - Variables

var data = Variable<[Data]>([])

// MARK: - Public Interface

func getData() {
    let request = Data.readAll()
    _ = request.rxResult().subscribe(onNext: { response in
        self.data.value = response.data
    }, onError: { (Error) in
    }, onCompleted: {
    }, onDisposed: {
    })
}
Run Code Online (Sandbox Code Playgroud)

然后在我的视图控制器中,我尝试将其绑定到 UIRefreshcontrol 和我拥有的集合视图。

let refresher: UIRefreshControl = UIRefreshControl()
let indicator = ActivityIndicator()

    indicator.asObservable()
    .bindTo(refresher.rx.isRefreshing)
    .addDisposableTo(disposeBag)

    let resultObservable = viewModel.data.asObservable()
        .trackActivity(indicator)
        .bindTo(self.collectionView.rx.items(cellIdentifier: reuseCell, cellType: DataCollectionViewCell.self)) {
            row, data, cell …
Run Code Online (Sandbox Code Playgroud)

swift rx-swift rx-cocoa

6
推荐指数
1
解决办法
6431
查看次数

RxSwift/RxCocoa:代码完成几乎无法正常工作

我正在尝试通过示例代码,教程等来学习RxSwift,但由于大多数教程都是针对Swift 2和以前版本的RxSwift,因此语法有所改变.通常这不会有问题,因为可以通过代码完成找到新语​​法,但对于RxCocoa,我有时什么也得不到.例:

// UITextField
textField.rx.text.
Run Code Online (Sandbox Code Playgroud)

我没有得到任何建议,即使我知道有方法,因为我能够手动解决它们,但它需要很多时间.我究竟做错了什么?

使用XCode 8.1,Swift 3,RxSwift/RxCocoa 3.1,macOS Sierra和Cocoa Pods(最新稳定版,昨天更新).我试图创建新项目并删除DerivedData,但结果相同.

swift rx-swift rx-cocoa

5
推荐指数
0
解决办法
400
查看次数

为自定义 UIControl 创建 ControlProperty

是否可以扩展结构 Reactive,其中基类是我从 UIControl 继承的自定义控件?

当我尝试以下代码时:

extension Reactive where Base: CustomControl {

    public var value: ControlProperty<CGFloat> {

        return CustomControl.rx.value(

            self.base,

            getter: { customControl in
                customControl.customProperty
            },
            setter: { customControl, value in
                customControl.customProperty = value
            }
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Instance member "value" cannot be used on type 'Reactive<CustomControl>'
Run Code Online (Sandbox Code Playgroud)

如果您向我提供任何解释,我将不胜感激。

uicontrol swift rx-swift rx-cocoa reactive

5
推荐指数
1
解决办法
2612
查看次数

RxSwift和UIPickerView

有没有办法绑定一个UIPickerViewObservable?

例如,UITableView我会这样做:

myObservableArray.bindTo(tableView.rx.items(cellIdentifier: "Identifier", cellType: MyCustomTableViewCell.self)) { (row, title, cell) in
        cell.textLabel?.text = title
    }
    .disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)

有类似的东西UIPickerView吗?

uipickerview ios swift rx-swift rx-cocoa

5
推荐指数
1
解决办法
1587
查看次数

UIButton上的RxSwift和isSelected属性

我有三个按钮,我希望它们一次只能选择一个:

在此输入图像描述

和:

在此输入图像描述

等等...

我的方法是:

class MyController: UIViewController {

    @IBOutlet var buttonOne: UIButton!
    @IBOutlet var buttonTwo: UIButton!
    @IBOutlet var buttonThree: UIButton!

    var buttonOneIsSelected = Variable(true)
    var buttonTwoIsSelected = Variable(false)
    var buttonThreeIsSelected = Variable(false)


    override func viewDidLoad() {
        super.viewDidLoad()

        buttonOne.isSelected = true

        buttonOneIsSelected.asDriver()
            .drive(buttonOne.rx.isSelected)
            .disposed(by: disposeBag)
        buttonTwoIsSelected.asDriver()
            .drive(buttonTwo.rx.isSelected)
            .disposed(by: disposeBag)
        buttonThreeIsSelected.asDriver()
            .drive(buttonThree.rx.isSelected)
            .disposed(by: disposeBag)

        buttonOne.rx.tap.asObservable().map { (_) -> Bool in
            return !self.buttonOne.isSelected
        }
        .do(onNext: { (isSelected) in
            self.buttonTwoIsSelected.value = !isSelected
            self.buttonThreeIsSelected.value = !isSelected
        })
        .bindTo(buttonOne.rx.isSelected)
        .disposed(by: disposeBag)

        buttonTwo.rx.tap.asObservable().map { (_) -> Bool …
Run Code Online (Sandbox Code Playgroud)

ios swift rx-swift rx-cocoa

5
推荐指数
1
解决办法
3758
查看次数

如何将多个驱动程序与RxSwift正确组合?

我正在将一个viewDidAppearfilter驱动程序与RxSwift 结合起来.他们工作得很好.但是当我引入第三个驱动程序时,它会停止调用flatMapLatest最新的组合.

在我的View Controller中,我有以下驱动程序:

let filter: Driver<String>
let viewDidAppear: Driver<Void>
let refresh: Driver<Void>
Run Code Online (Sandbox Code Playgroud)

在我的视图模型中:

// On viewDidAppear, I download a list of portfolios

let viewDidAppearPortfolios = viewDidAppear
    .flatMapLatest({ (_) -> Driver<Result<[PortfolioModel]>> in        
        return networkService.request(Router.portfolios)!
            .responseCollections()
            .trackActivity(fetching)
            .asDriver(onErrorJustReturn: .failure(NSError()))

    })
    .flatMapLatest({ (result: Result<[PortfolioModel]>) -> Driver<[PortfolioModel]> in

        switch result {
        case .success(let value): return Driver.just(value)
        case .failure(_): return Driver.just([])
        }

    })

// Then I combine with a filter from my search bar.

self.portfolios = Driver.combineLatest(viewDidAppearPortfolios, filter) …
Run Code Online (Sandbox Code Playgroud)

swift rx-swift rx-cocoa

5
推荐指数
1
解决办法
4207
查看次数

NSTableview带有RXSwift和RxCocoa for OSX

如何使用反应框架使用数组填充NSTableview?在iOS中使用UITableview:

self.viewModel.arrayElements.asObservable()
        .observeOn(MainScheduler.instance)
        .bind(to: detailsTableView.rx.items(cellIdentifier: "comment", cellType: UITableViewCell.self)){
            (row,element,cell) in
                 cell.addSubview(cellView)
        }.addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)

我如何为NSTableView实现相同的功能

在此处输入图片说明

macos nstableview reactive-programming rx-swift rx-cocoa

5
推荐指数
1
解决办法
443
查看次数

RxSwift 观察数组的变化

假设我们有 InvoiceDataModel 数组

private let invoices Variable<[InvoiceDataModel]> = Variable([])

class InvoiceDataModel { 
    let id: Variable<Int>
    var entity: Variable<InvoiceDto>
    var isSelected: Variable<Bool> 
}
Run Code Online (Sandbox Code Playgroud)

点击复选框时,我正在更改 isSelected 的值。我想要实现的是对 isSelect 更改做出反应:

  • 计算所选项目的总金额(每个实体有var amount: Double
  • 检测是否选择了集合中的所有项目

是否可以观察整个数组并对元素更改中的单个属性做出反应?不知道我应该如何实现这一目标。

也许我对这个案子的处理方法是完全错误的。但是我不确定我应该如何以不同的方式在这里运作。

ios swift rx-swift rx-cocoa

5
推荐指数
1
解决办法
3177
查看次数

如何让 RxSwift 自动完成功能在 Xcode 10.1 中工作?

刚刚开始学习RxSwift。尽管 rx 命令构建良好,但为什么自动完成功能不起作用? 在此输入图像描述

编辑:临时解决方案可能是添加,asObservable但我想要完整的体验! 在此输入图像描述

xcode swift rx-swift rx-cocoa xcode10

5
推荐指数
1
解决办法
490
查看次数