我有一个UISwitch需要选择,以便继续到下一个表单屏幕.所以我想将UISwitch选中的内容绑定到UIButton启用状态.我只是无法得到这个样本.
这是我正在尝试但不编译的内容:
let termsValidation = termsSwitch
.rx_selected
.shareReplay(1)
termsValidation
.bindTo(signupButton.rx_enabled)
.addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)
在RxSwift和RxCocoa中使用它的正确方法是什么?
如何使用反应框架使用数组填充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实现相同的功能
假设我有一些视图最初填充了一些数据。比我通过网络获取数据并想用这个更新的数据更新视图。
在这一点上,我想从这个 observable 创建 Driver 来驱动 UI 元素。但是,如果 observable 出现错误,我不想做任何事情,因为视图已经有一些数据,所以我只想忽略这样的错误。asDriver() 函数想要定义在出现错误时应该做什么。这样做可以吗:
let dataUpdated: Observable<DataItem> = ...
let driver = dataUpdated.asDriver(onErrorDriveWith: Driver<DataItem>.empty())
Run Code Online (Sandbox Code Playgroud)
?
当用户键入一些文本时,我正在观察 UISearchBar.rx.text 属性以执行一些与搜索相关的操作。但有时,我也想以编程方式触发此搜索操作。例如,在此示例中创建视图时,不幸的是没有打印“Searching for [...]”文本。
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
@IBOutlet weak var mySearchBar: UISearchBar!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
// Trigger search when text changes
mySearchBar.rx.text.subscribe(onNext: { (text)
print("Searching for \(text)...")
// do some search Action
}
.disposed(by: disposeBag)
// Programmatically trigger a search
mySearchBar.text = "Some text to search"
}
}
Run Code Online (Sandbox Code Playgroud)
问题是更改 mySearchBar.text 不会触发新的 rx.text 事件。有没有办法做到这一点?
例如,感谢这篇文章,我知道有了 UITextField,这可以使用 UITextField.sendActions(for: .ValueChanged) 函数实现。UISearchBar 是否有类似的方法?
我是RxSwift的新手,并试图通过创建一个简单的注册表来学习.我想用a来实现它UITableView(作为练习,以及将来会变得更复杂)所以我目前正在使用两种类型的单元:
TextInputTableViewCell只有一个UITextFieldButtonTableViewCell只有一个UIButton为了表示每个单元格,我创建了一个看起来像这样的枚举:
enum FormElement {
case textInput(placeholder: String, text: String?)
case button(title: String, enabled: Bool)
}
Run Code Online (Sandbox Code Playgroud)
并在a中使用它Variable来提供tableview:
formElementsVariable = Variable<[FormElement]>([
.textInput(placeholder: "username", text: nil),
.textInput(placeholder: "password", text: nil),
.textInput(placeholder: "password, again", text: nil),
.button(title: "create account", enabled: false)
])
Run Code Online (Sandbox Code Playgroud)
通过这样绑定:
formElementsVariable.asObservable()
.bind(to: tableView.rx.items) {
(tableView: UITableView, index: Int, element: FormElement) in
let indexPath = IndexPath(row: index, section: 0)
switch element {
case .textInput(let placeholder, let defaultText):
let cell …Run Code Online (Sandbox Code Playgroud) 我有两个问题:
struct Info {
var index: Int?
var data: String?
}
let infoData: BehaviorRelay<Info> = BehaviorRelay<Info>(value: Info())
var osInfo: Observable<String> { return self.infoData.map({ return $0.data }).distinctUntilChanged() }
osInfo.bind { (target) in
print("bind!")
}.disposed(by: self.disposeBag)
osInfo.subscribe { (target) in
print("subscribe!")
}
.disposed(by: self.disposeBag)
Run Code Online (Sandbox Code Playgroud)
a. var osInfo: Observable<String> { return self.infoData.map({ return $0.data }).distinctUntilChanged() }
b. var osInfo: Observable<String> { return self.infoData.asObservable().map({ return $0.data }).distinctUntilChanged() }
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我想使用 RxSwift 和 RxCocoa 实现以下目标
... 等等
这里的关键是每个文件的处理必须在下载下一个文件之前完成。至少必须按顺序执行文件处理的顺序。如果我可以在处理文件 1 的同时开始下载文件 2,那就太棒了,但不是必需的。
我已经尝试使用 SerialDispatchQueueScheduler 来完成这项工作,但由于文件大小不同,每个文件的下载在不同的时间完成,因此处理代码的触发顺序与我开始下载的顺序不同。
通过使用 NSOperations 等,我可以在不使用 Rx 的情况下轻松实现这一点,但我想在这个应用程序中继续使用 Rx,因为它是我在这个应用程序的其他地方使用的。
下面我包含了一些代码片段。为了这个问题,已经添加了评论。
.flatMap { [unowned self] (tasks: [DiffTask]) -> Observable<ApplyDiffStatus> in
return Observable.from(tasks)
.observeOn(self.backgroundScheduler) // StackOverflow: backgroundScheduler is a SerialDispatchQueueScheduler
.flatMapWithIndex({ [unowned self] (task, index) in
return self.fetchDiff(for: task, taskIndex: index, taskCount: tasks.count) // StackOverflow: Downloads a file from a URL
})
.catchError({ (error) -> Observable<DictionaryUpdater.DiffTaskProgress> in
observable.onError(error)
throw error
}) …Run Code Online (Sandbox Code Playgroud) 我正在使用RxSwift将模型数组绑定到集合视图
如何从给定的 indexPath 获取模型对象?
我正在做这样的绑定:
vm.bikeIssueCatagories()
.drive(self.collectionView.rx.items(cellIdentifier: "BikeIssueCategoryCollectionViewCell", cellType: UICollectionViewCell.self)) { row, data, cell in
}.disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
我的问题的核心是,我需要获取用户选择的模型对象和单元格。Using collectionView.rx.modelSelected(T.self)only 给了我模型 og type T。打电话collectionView.rx.itemSelected只给我选择的IndexPath
collectionView.rx.itemSelected.asDriver()
.driveNext { [unowned self] indexPath in
guard let model = try? collectionView.rx.model(at: indexPath) else { return }
guard let cell = self.collectionView.cellForItem(at: indexPath) else { return }
}.disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在 indexPath 处创建模型时,这给了我一个错误:
类型“inout UICollectionView”不符合协议“ReactiveCompatible”
试试看:
let indexPath = IndexPath.init()
self.collectionView.rx.model(at: indexPath)
Run Code Online (Sandbox Code Playgroud)
也给了我一个错误:
对成员“model(at:)”的不明确引用
SO...如何获取用户选择的模型对象和单元格?
我有3个按钮
@IBOutlet weak var editGeomButton: UIButton! // 1
@IBOutlet weak var editDataButton: UIButton! // 2
@IBOutlet weak var deleteDataButton: UIButton! // 3
Run Code Online (Sandbox Code Playgroud)
单击任何此按钮时,我希望调用以下方法。用正确的数字。
func didTap() -> Observable<Int> {
}
didTap().subscribe(onNext: { (tag) in
switch tag {
case 1:
print("Did tap Edit Geom")
case 2:
print("Did tap Edit Data")
case 3:
print("Did tap Delete geom")
default:
print("Invalid tap")
}
}).disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
请帮助使用 Observable 在 didTap 方法中编写代码?我认为这可以使用组合运算符来实现。但我不明白如何编码。
我创建了一个新的 Swift 包并尝试使用RxSwift其中的依赖项。我按照这些说明添加依赖项,但在此之后我的包无法构建,并出现以下错误:
找不到包“mylibrary”目标“MyLibrary”所需的产品“RxCocoa”。
我的包清单在这里:
// swift-tools-version: 5.8
import PackageDescription
let package = Package(
name: "MyLibrary",
products: [them visible to other packages.
.library(
name: "MyLibrary",
targets: ["MyLibrary"]),
],
dependencies: [
.package(url: "https://github.com/ReactiveX/RxSwift.git", .exact("6.5.0"))
],
targets: [
.target(
name: "MyLibrary",
dependencies: ["RxSwift", "RxCocoa"]),
.testTarget(
name: "MyLibraryTests",
dependencies: ["MyLibrary"]),
]
)
Run Code Online (Sandbox Code Playgroud)
我在用着Xcode 14.3。我应该如何将 RxSwift 依赖项添加到包中。