|> 和 .~ 上的 Swift 语法

Chr*_*her 8 syntax swift

有一些 Swift 语法我不明白......

let creator = .template |> User.lens.avatar.small .~ ""
Run Code Online (Sandbox Code Playgroud)

有人能告诉我|>and.~语法的作用吗?我也看到%~用过。

如果您能指出 Swift 文档中的位置,我将不胜感激。使用这些字符进行搜索很困难。我想查看完整的符号数组。

Ama*_*lho 4

流管道

|>流可以通过使用流管道运算符和流操作来组成。

例如,使用的一种非常常见的增量搜索技术searchTextStream如下所示:

let searchResultsStream: Stream<[Result]> = searchTextStream
    |> debounce(0.3)
    |> distinctUntilChanged
    |> map { text -> Stream<[Result]> in
        return API.getSearchResultsStream(text)
    }
    |> switchLatestInner
Run Code Online (Sandbox Code Playgroud)

在某些情况下(例如repeat())您想使用 cloneable Stream<T>.Producer( Void -> Stream<T>) 而不是 plain Stream<T>。在这种情况下,您可以改用|>>streamProducer-pipelined 运算符。

// first, wrap stream with closure
let timerProducer: Void -> Stream<Int> = {
    return createTimerStream(interval: 1)
        |> map { ... }
        |> filter { ... }
}

// then, use `|>>`  (streamProducer-pipelining operator)
let repeatTimerProducer = timerProducer |>> repeat(3)
Run Code Online (Sandbox Code Playgroud)

但在上述情况下,用闭包包装总是会变得很麻烦,因此您也可以使用|>>运算符进行流和流操作(感谢@autoclosure)。

let repeatTimerProducer = createTimerStream(interval: 1)
    |>> map { ... }
    |>> filter { ... }
    |>> repeat(3)
Run Code Online (Sandbox Code Playgroud)