## RxSwift KISS code generator. RxSwift code is partially machine generated. It converts *.tt files into generated *.swift files. There are multiple reasons why that is the case. * Performance * Consistency * Removes burden from developers (me :) * It's fun To see how it in action, take a look at CombineLatest+arity.tt CombineLatest+arity.swift ``` // // CombineLatest.tt.swift // RxSwift // // Created by Krunoslav Zaher on 4/22/15. // Copyright (c) 2015 Krunoslav Zaher. All rights reserved. // import Foundation <% for i in 2 ... 10 { %> // <%= i %> public func combineLatestOrDie<<%= ", ".join(map(1...i) { "E\($0)" }) %>, R> (<%= ", ".join(map(1...i) { "source\($0): Observable" }) %>, resultSelector: (<%= ", ".join(map(1...i) { "E\($0)" }) %>) -> Result) -> Observable { return CombineLatest<%= i %>( <%= ", ".join(map(1...i) { "source\($0): source\($0)" }) %>, resultSelector: resultSelector ) } public func combineLatest<<%= ", ".join(map(1...i) { "E\($0)" }) %>, R> (<%= ", ".join(map(1...i) { "source\($0): Observable" }) %>, resultSelector: (<%= ", ".join(map(1...i) { "E\($0)" }) %>) -> R) -> Observable { return CombineLatest<%= i %>( <%= ", ".join(map(1...i) { "source\($0): source\($0)" }) %>, resultSelector: { success(resultSelector(<%= ", ".join(map(0..)) } ) } ``` to ``` // This file is autogenerated. // Take a look at `Preprocessor` target in RxSwift project // // CombineLatest.tt.swift // RxSwift // // Created by Krunoslav Zaher on 4/22/15. // Copyright (c) 2015 Krunoslav Zaher. All rights reserved. // import Foundation // 2 public func combineLatestOrDie (source1: Observable, source2: Observable, resultSelector: (E1, E2) -> Result) -> Observable { return CombineLatest2( source1: source1, source2: source2, resultSelector: resultSelector ) } public func combineLatest (source1: Observable, source2: Observable, resultSelector: (E1, E2) -> R) -> Observable { return CombineLatest2( source1: source1, source2: source2, resultSelector: { success(resultSelector($0, $1)) } ) } ``` It's pretty generic, I'm thinking of extracting it as a separate project.