map/mapError
map
操作符会执行给定的闭包,将上游发布的内容进行转换,然後再发送给下游订阅者,mapError
则将错误转换为另外一种错误类型
[1, 2].publisher
.map { $0.description + "test" }
.sink(receiveValue: { value in
print(value)
})
flatMap
flatMap
操作符会转换上游发布者发送的所有的元素,然後返回一个新的或者已有的发布者。
flatMap
会将所有返回的发布者的输出合并到一个输出流中。我们可以通过 flatMap
操作符的 maxPublishers
参数指定返回的发布者的最大数量
class TestObservableObject: ObservableObject {
var cancellable: AnyCancellable?
struct Student: Decodable {
let name: String
}
let json = """
[{
"name": "Ryder"
},
{
"name": "Jason"
},
{
"name": "Ray"
}]
"""
init() {
let publisher = PassthroughSubject<String, Never>()
cancellable = publisher
.flatMap { value in
Just(value.data(using: .utf8)!)
.decode(type: [Student].self, decoder: JSONDecoder())
.catch { _ in
Just([Student(name: "errorName")])
}
}
.sink(receiveCompletion: { _ in
print("finished")
}, receiveValue: { someValue in
print(someValue)
})
publisher.send(json)
}
}
因为flatMap
闭包要求的返回值必须是一个publisher,所以在上边的程序码中,我们使用了Just
,它把 json资料对映成阵列。
在上边的catch
中也用到了Just
,目的是当发生错误时,返回一个预设的值,值得注意的是,catch
同样要求返回一个publsiher
scan
scan
将收到的值与当前的值,按照给定的closure 进行转换
(1...3).publisher
.scan(3, +)
.sink(receiveValue: { value in
print(value)
})
/*印出
4
6
9
*/
>>: 30天学会 Python: Day 17-自动化的第一步
为了做火焰烤饼而自制酸奶油,做完烤饼还有剩下的酸奶油,所以试着找了其他酸奶油料了,意外发现了俄罗斯的...
传值(call by value)vs传址(call by reference) 基本型别(Numb...
假设,你今天写了一个页面或是储存了一些简单的状态或资讯,call了另外一个API或是跳转到不同页面并...
初始控制 会利用某些手段达成RCE(Remote code execution,远端代码执行),方法...
箭头函式 箭头函式功能与一般函式的用法大致差不多,不过写法却比一般函式还要简洁的多。 这里就直接来时...