- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试学习 RxSwift 概念,但不幸的是陷入了困境。有两个不同的屏幕连接到我的TabBarController
。在我的SettingsViewController
上,我正在获取两个字符串值并创建一个模型,On TransactionListViewController
,我需要观察变化并提出新的请求来填充列表。
在父选项卡栏 Controller 上,我有一个变量,当 didLoadCall 时,我使用 wallet.asObservable().subscribe
订阅此模型。
关于 SettingViewController
当用户按下登录按钮时,我尝试使用以下代码更改 UserModel:
if let tabBar = parent?.parent as? TransactionTabBarController{
Observable.just(wallet).bind(to: tabBar.wallet)
}
我意识到 wallet.asObservable().subscribe 的 onNext 函数正在调用。
我的 TransactionListViewController
上还有另一个钱包型号,在 viewDidLoad 函数上我正在运行以下代码:
wallet.asObservable().subscribe(onNext: { (wallet) in
APIClient.getTransaction(address: wallet.walletAddress)
.observeOn(MainScheduler.instance)
.subscribe(onNext: { (model) in
self.changeModels(items: model.result)
.bind(to: self.transactionTableView.rx.items(dataSource: self.dataSource))
.disposed(by: self.disposeBag)
})
.disposed(by: self.disposeBag)}, onError: nil, onCompleted: nil, onDisposed: nil)
.disposed(by: disposeBag)
我尝试在 TabBar 的 onNext 函数上设置钱包,但在 TransactionListViewController 上被迷住了几次。
有人可以帮我吗?
最佳答案
遗憾的是,您的代码示例难以理解。但是,您似乎在问如何在通过选项卡栏 View Controller 连接的两个 View Controller 之间传输数据。以下是您可以采取的一种方法...
为了使用此代码,您只需为 TabBarController.logic
分配一个函数,该函数将 TabBarController.Inputs
作为输入参数并返回 TabBarController.Outputs
。您可以在 AppDelegate 中进行此分配。
这段代码中需要注意的关键是,每个 ViewController 子类都有一个 struct Inputs
、一个 struct Outputs
和一个 varlogic
它。
Inputs
包含用户可以输入的所有 UI 元素(例如,按钮和 TextFields),Outputs
包含用户可以输入的所有 UI 元素请参阅(例如,标签文本、isHidden 标志。)
logic
var 是一个闭包,其中包含该 View Controller 的所有逻辑。请注意,它可以被分配给。这意味着您可以独立于 View Controller 来开发和测试逻辑,并且如果需要的话,可以根据上下文为 View Controller 提供不同的逻辑对象。
有关使用协调器而不是在容器 View Controller 中嵌入代码的更复杂的示例代码,请参阅此存储库:https://github.com/danielt1263/RxEarthquake
class TabBarController: UITabBarController {
struct Inputs {
let login: Observable<Void>
}
struct Outputs {
let transactions: Observable<[Transaction]>
}
var logic: (Inputs) -> Outputs = { _ in fatalError("Forgot to set logic.") }
private let bag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
let settings = children[0] as! SettingsViewController
let transactionList = children[1] as! TransactionListViewController
let login = PublishSubject<Void>()
let outputs = logic(Inputs(login: login.asObservable()))
let bag = self.bag
settings.logic = { inputs in
inputs.login
.bind(to: login)
.disposed(by: bag)
return SettingsViewController.Outputs()
}
transactionList.logic = { inputs in
return TransactionListViewController.Outputs(transactions: outputs.transactions)
}
}
}
class SettingsViewController: UIViewController {
struct Inputs {
let login: Observable<Void>
}
struct Outputs {
}
var logic: (Inputs) -> Outputs = { _ in fatalError("Forgot to set logic.") }
private let bag = DisposeBag()
@IBOutlet weak var login: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
_ = logic(Inputs(login: login.rx.tap.asObservable()))
}
}
class TransactionListViewController: UIViewController {
struct Inputs {
}
struct Outputs {
let transactions: Observable<[Transaction]>
}
var logic: (Inputs) -> Outputs = { _ in fatalError("Forgot to set logic.") }
private let bag = DisposeBag()
@IBOutlet weak var transactionTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
let output = logic(Inputs())
let dataSource = MyDataSource()
output.transactions
.bind(to: transactionTableView.rx.items(dataSource: dataSource))
.disposed(by: bag)
}
}
关于swift - RxSwift 观察模型的变化并发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401647/
我尝试使用 RxSwift 作为依赖项创建一个名为 MyLib 的库,它使用 cocoapod 命令 pod lib create。但是,以下代码不起作用。 import UIKit import M
我是 RxSwift 的新手。很新。通常要在没有 Rx 的情况下链接你,你将下一个函数放在一个完成闭包中。我的同事告诉我改用 flatmap 或我们的 concatmap 版本,但从未给我一个例子。有
我创建了一个使用 RxSwift、RxCocoa 和其他第三方框架的自定义框架。自定义框架正确编译,但当我添加到应用程序时,它崩溃并出现以下错误: dyld: Library not loaded:
我会尽可能简短:我们启动了完整的 RxSwift 应用程序,但我们的协调员开始不知所措,难以维护和扩展,因此我们正在重新设计他们以不使用 RxSwift,现在我们不知道如何使用它们以及保存它们的位置。
我正在使用 RxSwift 和 MVVM 实现一个简单的地址 UITableView。我像这样在我的 View Controller 中创建了一个绑定(bind)。 viewModel.address
ReactiveX.io documentation使用 AnonymousDisposable,它在 RxSwift 2.x 中,但在 RxSwift 3.0 中是一个未解析的标识符。我应该改用什么
我有一个应用程序使用 MVP与 Coordinator图案。 当子协调器发送事件时,我希望我的 AppCoordinator递归调用一个方法,根据一些 SessionState 选择下一个协调器. 该
上下文:我的团队正在开始一个新的中型 Swift 项目(大约 20 MM),我正在考虑在 RxSwift 中开发它.我的一位经理怀疑,他曾经在 上的调试方面有过不好的经历。响应式(Reactive)编
嘿,我在 HackingWithSwift 教程中学到了如何使用 Combine 发出链接的网络请求(请参阅下面的代码)。现在我将使用 RXSwift 构建相同的逻辑,但我不知道如何像在 Combin
我正在尝试进行几个 API 调用并填充领域数据库。 一切正常。但是,当我尝试运行 performSegue()在 subscribe()方法引发异常,通知我不能在后台线程上执行此操作,这是完全合理的。
假设我有 Int 数组: var items = [1, 2, 3, 4, 5] 以及一个接受 Int 参数并基于它发送网络请求的函数: func sendRequest(argument: Int
我有一个文本字段,它有 2 个验证规则:最小数量的字符和字母数字字符。 我希望能够向用户展示他在错误标签中做错了什么,但问题是,如果我将文本字段绑定(bind)到两个规则,它可能会令人毛骨悚然,因为一
我试图在选择表行时在后台执行复杂的计算,但它卡住了 UI。请查看我的代码并告诉我可能有什么问题。 tableView.rx .modelSelected(Sring.self) .fl
我正在尝试构建一个计时器,该计时器从15秒开始,递减计数到0。 事情是,我想根据事件将计时器更新2秒。 到目前为止,这是我尝试做的事情: struct ViewModel { struct I
我正在使用该领域作为后端。使用RxSwift,我可以在DB表中观察到某些列(它跟踪未决状态)。得到事件后,我切换到另一个Serial计划表,以将列的值设置为flatMap块中的Progress状态(返
我对响应式(Reactive)编程很陌生,所以我仍然很难理解它是如何工作的。 我正在尝试做的事情:当用户点击 signUpButton (signUpTrigger) 时,会触发多个 observab
以下是与问题39类似的示例:http://reactivex.io/learnrx/ 我正在尝试将方法调用search(query: String)转换为这些调用的序列。 他们通过创建一个Variab
我有两个 Single 值,它们包含同一对象的数组。我想合并它们并应用 map 并将它们作为单个返回。可能吗? 所以我有这个: func fetchTripList(type: TripType) -
使用 RxSwift,假设我有一个包含整数可观察值的 A 类 class A: { let count: Observable } 以及 A 的可观察对象集合 let data: Observ
我想转换一个我已经完全接收的 ViewModel。该应用程序计算算术表达式。 ViewModel 有两个字符串,一个带有“逻辑”符号,将发送到表达式求值器以获取结果,另一个带有其他符号的“演示”字符串
我是一名优秀的程序员,十分优秀!