我正在尝试构建一个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永远不会被调用!
这背后的原因是:
任何帮助将不胜感激.
谢谢
该模型
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) 您好,我正在尝试使 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) 我正在尝试通过示例代码,教程等来学习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,但结果相同.
是否可以扩展结构 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)
如果您向我提供任何解释,我将不胜感激。
有没有办法绑定一个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吗?
我有三个按钮,我希望它们一次只能选择一个:
和:
等等...
我的方法是:
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) 我正在将一个viewDidAppear和filter驱动程序与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) 如何使用反应框架使用数组填充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实现相同的功能
假设我们有 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)是否可以观察整个数组并对元素更改中的单个属性做出反应?不知道我应该如何实现这一目标。
也许我对这个案子的处理方法是完全错误的。但是我不确定我应该如何以不同的方式在这里运作。
rx-cocoa ×10
rx-swift ×10
swift ×9
ios ×4
macos ×1
nstableview ×1
observable ×1
reactive ×1
uicontrol ×1
uipickerview ×1
xcode ×1
xcode10 ×1