在 RxSwift 中访问一个实例的闭包 属性
Accessing a closure property of an instance in RxSwift
我正在尝试深入研究 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 - 我访问的是实例的字符串 属性 吗?
Point 2ab - 我想,我正在调用一个实例后访问一个实例
关闭,我到底在做什么?
点 3 - 获取错误,无法将类型“()”的值转换为闭包结果类型
'Observable<ViewController.Client.DelegateEvent>' 那么我该如何解决
这是一种有意义的方式?
非常感谢您的每一个回答和评论。
Point 1 - Am I accessing a string property of a instance, right ?
严格来说是的,但实例将仅为此次访问创建,然后立即销毁。做 IMO 是相当愚蠢的。
Point 2ab - I think, I am accessing an instance after calling a closure,Actually what am I doing here?
第 2a 点创建了一个客户值(与第 1 点中使用的值不同,但它将具有相同的值。)
点 2b 调用 setable()
值。值对象将在 viewDidLoad 函数结束时销毁。
Point 3 - Getting error, Cannot convert value of type '()' to closure result type 'Observable<ViewController.Client.DelegateEvent>'
Client.live
computed 属性 是一个全局变量,您正试图从该全局变量内部访问特定 ViewController
的实例变量,但无法定义哪个实例变量应该访问实例。
So How can I fix this in a meaningful way ?
这个问题我无法回答,因为我不知道“固定”在这种情况下是什么意思...
我正在尝试深入研究 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 - 我访问的是实例的字符串 属性 吗?
Point 2ab - 我想,我正在调用一个实例后访问一个实例 关闭,我到底在做什么?
点 3 - 获取错误,无法将类型“()”的值转换为闭包结果类型 'Observable<ViewController.Client.DelegateEvent>' 那么我该如何解决 这是一种有意义的方式?
非常感谢您的每一个回答和评论。
Point 1 - Am I accessing a string property of a instance, right ?
严格来说是的,但实例将仅为此次访问创建,然后立即销毁。做 IMO 是相当愚蠢的。
Point 2ab - I think, I am accessing an instance after calling a closure,Actually what am I doing here?
第 2a 点创建了一个客户值(与第 1 点中使用的值不同,但它将具有相同的值。)
点 2b 调用 setable()
值。值对象将在 viewDidLoad 函数结束时销毁。
Point 3 - Getting error, Cannot convert value of type '()' to closure result type 'Observable<ViewController.Client.DelegateEvent>'
Client.live
computed 属性 是一个全局变量,您正试图从该全局变量内部访问特定 ViewController
的实例变量,但无法定义哪个实例变量应该访问实例。
So How can I fix this in a meaningful way ?
这个问题我无法回答,因为我不知道“固定”在这种情况下是什么意思...