【发布时间】:2022-01-05 20:51:10
【问题描述】:
我正在尝试深入研究 RxSwift 并找出不同的方法。我在 Github 中使用类似的代码结构实现了一些项目,如下所示。我曾经认为是命令式的方式,但我真的想知道我在 Rxswift 世界中缺少什么。
class ViewController: UIViewController {
let observableProperty = PublishSubject<Client.DelegateEvent>()
struct Client {
static var live: Self { Client(events: { stringInputFromSomeWhere in
observableProperty.asObservable() // Point 3
}, setable: {
{ _ = SomeManager().doNothing() }
}, someId: "cool property")}
var events: (String) -> Observable<DelegateEvent>
var setable: () -> ()
var someId: String
init(events: @escaping (String) -> Observable<DelegateEvent>,
setable: @escaping () -> (),
someId: String
) {
self.events = events
self.setable = setable
self.someId = someId
}
public enum DelegateEvent {
case didUpdate(SpecialLocation)
case didFail(Error)
}
}
struct SpecialLocation {
}
class SomeManager {
func doNothing() {
print("noThing Worked")
}
}
override func viewDidLoad() {
super.viewDidLoad()
let clearStep = Client.live.someId // Point 1
let whoAreYou = Client.live // Point 2a
whoAreYou.setable() // Point 2b
print(whoAreYou.someId)
}
-
第 1 点 - 我是在访问实例的字符串属性,对吗?
-
第 2ab 点 - 我想,我在调用 关闭,其实我在这里做什么?
-
第 3 点 - 出现错误,无法将 '()' 类型的值转换为闭包结果类型 'Observable
' 那么我该如何解决 这有意义吗?
非常感谢您的每一个回答和评论。
【问题讨论】:
-
没有工作项目这样做,因为它不起作用?什么项目与它“相似”?
-
此外,
Subject提供了这个 is 命令。它们用于将命令式代码转换为 Rx 代码。 -
最后,你的问题都与 RxSwift 无关。它们是 Swift 语言问题。