2016-12-30 64 views
0

有一些斯威夫特語法,我不明白...斯威夫特語法上|>和〜

let creator = .template |> User.lens.avatar.small .~ "" 

有人能告訴我|>.~語法做什麼? 我也看到%~使用。

如果你能指出Swift文檔中的位置,我將不勝感激。使用這些字符搜索很困難。我希望看到所有的符號。

+2

那裏的代碼來自哪裏?你知道你可以定義幾乎任何你想成爲運算符的東西,比如+和 - ?我想這只是兩個自定義操作符。 – luk2302

+0

https://github.com/kickstarter/ios-oss/blob/master/Kickstarter-iOS/Tests/Views/ActivitiesViewControllerTests.swift – Christopher

+2

與大多數情況一樣,可以通過命令點擊操作員來查看他們的聲明。 – Alexander

回答

1

流流水線

流可以通過使用|>流流水線操作和流操作組成。

例如,使用searchTextStream一個很普通的增量的搜索技術將是這樣的:

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

有某些情況下(如repeat()),當你想使用一個可複製的,Stream<T>.ProducerVoid -> Stream<T>),而不是簡單的Stream<T> 。在這種情況下,您可以使用|>> streamProducer-pipelining運算符。

// 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) 

但在上述情況下,封閉包裝總是會成爲累贅,所以你也可以使用|>>運營商流&流操作,以及(感謝@autoclosure)。

let repeatTimerProducer = createTimerStream(interval: 1) 
    |>> map { ... } 
    |>> filter { ... } 
    |>> repeat(3)