[英]How Does RXSwift combineLatest Use, What Looks Like, An Anonymous Class In A Closure And Handle Additional Parameters
据我了解,Swift不支持匿名类。
我正在使用RXSwift代码库,并且有一段代码我无法完全掌握正在发生的事情。
这是块:
sections = Observable.combineLatest(observable1,
observable2,
observable3)
{
(arg1: $1,
arg2: $0.0,
arg3: $0.1,
arg4: $2)
}
.map { arg1, arg2, arg3, arg4 -> [Section] in
// Do Stuff
}
我所遇到的问题是将CombineLatest转换为匿名类的代码块。
当我查看CombineLatest的签名时,它显示:
public static func combineLatest<O1, O2, O3>(_ source1: O1, _ source2: O2, _ source3: O3, resultSelector: @escaping (O1.E, O2.E, O3.E) throws -> Self.E) -> RxSwift.Observable<Self.E> where O1 : ObservableType, O2 : ObservableType, O3 : ObservableType
因此,在我阅读该书时,@ escaping结束@escaping (O1.E, O2.E, O3.E)
通过@escaping (O1.E, O2.E, O3.E)
接受了3个参数。
似乎正在创建一个新的匿名对象,它的对象带有4个参数而不是3个。
您能否解释一下如何创建一个看似匿名的类的新可观察类(我不太可能理解),并且该类是用4个参数而不是3个参数创建的?
闭包内的(arg1: $1, arg2: $0.0, arg3: $0.1, arg4: $2)
部分创建一个元组。 元组是一组任何类型的多个值。 元组的每个元素都可以有一个名称,但是始终可以通过数字访问它们。 在您的示例中,元组有4个元素,名称分别为arg1,arg2,arg3和arg4。 元组的元素可以具有任何类型。
创建元组的语法是用逗号分隔的值的列表,括号内带有可选名称:
let a = (1, "hello", true)
let b = (first: 1, second: "hello", true)
要访问元组的值,请使用.
后跟名称或索引:
print(a.0, a.1, a.2)
print(b.first, b.second, b.2)
let x = b.0
请注意,即使元素已命名,也可以使用索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.