Skip to content
This repository was archived by the owner on Dec 5, 2019. It is now read-only.

Commit 2daee11

Browse files
committed
Add combineLatest & zip over multiple ColdSignals
1 parent b6d37d1 commit 2daee11

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

ReactiveCocoa/Swift/ColdSignal.swift

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,114 @@ extension ColdSignal {
10871087
}
10881088
}
10891089

1090+
/// An overloaded function that combines the values of up to 10 signals, in the
1091+
/// manner described by ColdSignal.combineLatestWith().
1092+
public func combineLatest<A, B>(a: ColdSignal<A>, b: ColdSignal<B>) -> ColdSignal<(A, B)> {
1093+
return a.combineLatestWith(b)
1094+
}
1095+
1096+
public func combineLatest<A, B, C>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>) -> ColdSignal<(A, B, C)> {
1097+
return combineLatest(a, b)
1098+
.combineLatestWith(c)
1099+
.map(repack)
1100+
}
1101+
1102+
public func combineLatest<A, B, C, D>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>) -> ColdSignal<(A, B, C, D)> {
1103+
return combineLatest(a, b, c)
1104+
.combineLatestWith(d)
1105+
.map(repack)
1106+
}
1107+
1108+
public func combineLatest<A, B, C, D, E>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>) -> ColdSignal<(A, B, C, D, E)> {
1109+
return combineLatest(a, b, c, d)
1110+
.combineLatestWith(e)
1111+
.map(repack)
1112+
}
1113+
1114+
public func combineLatest<A, B, C, D, E, F>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>) -> ColdSignal<(A, B, C, D, E, F)> {
1115+
return combineLatest(a, b, c, d, e)
1116+
.combineLatestWith(f)
1117+
.map(repack)
1118+
}
1119+
1120+
public func combineLatest<A, B, C, D, E, F, G>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>, g: ColdSignal<G>) -> ColdSignal<(A, B, C, D, E, F, G)> {
1121+
return combineLatest(a, b, c, d, e, f)
1122+
.combineLatestWith(g)
1123+
.map(repack)
1124+
}
1125+
1126+
public func combineLatest<A, B, C, D, E, F, G, H>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>, g: ColdSignal<G>, h: ColdSignal<H>) -> ColdSignal<(A, B, C, D, E, F, G, H)> {
1127+
return combineLatest(a, b, c, d, e, f, g)
1128+
.combineLatestWith(h)
1129+
.map(repack)
1130+
}
1131+
1132+
public func combineLatest<A, B, C, D, E, F, G, H, I>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>, g: ColdSignal<G>, h: ColdSignal<H>, i: ColdSignal<I>) -> ColdSignal<(A, B, C, D, E, F, G, H, I)> {
1133+
return combineLatest(a, b, c, d, e, f, g, h)
1134+
.combineLatestWith(i)
1135+
.map(repack)
1136+
}
1137+
1138+
public func combineLatest<A, B, C, D, E, F, G, H, I, J>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>, g: ColdSignal<G>, h: ColdSignal<H>, i: ColdSignal<I>, j: ColdSignal<J>) -> ColdSignal<(A, B, C, D, E, F, G, H, I, J)> {
1139+
return combineLatest(a, b, c, d, e, f, g, h, i)
1140+
.combineLatestWith(j)
1141+
.map(repack)
1142+
}
1143+
1144+
/// An overloaded function that zips the values of up to 10 signals, in the
1145+
/// manner described by ColdSignal.zipWith().
1146+
public func zip<A, B>(a: ColdSignal<A>, b: ColdSignal<B>) -> ColdSignal<(A, B)> {
1147+
return a.zipWith(b)
1148+
}
1149+
1150+
public func zip<A, B, C>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>) -> ColdSignal<(A, B, C)> {
1151+
return zip(a, b)
1152+
.zipWith(c)
1153+
.map(repack)
1154+
}
1155+
1156+
public func zip<A, B, C, D>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>) -> ColdSignal<(A, B, C, D)> {
1157+
return zip(a, b, c)
1158+
.zipWith(d)
1159+
.map(repack)
1160+
}
1161+
1162+
public func zip<A, B, C, D, E>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>) -> ColdSignal<(A, B, C, D, E)> {
1163+
return zip(a, b, c, d)
1164+
.zipWith(e)
1165+
.map(repack)
1166+
}
1167+
1168+
public func zip<A, B, C, D, E, F>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>) -> ColdSignal<(A, B, C, D, E, F)> {
1169+
return zip(a, b, c, d, e)
1170+
.zipWith(f)
1171+
.map(repack)
1172+
}
1173+
1174+
public func zip<A, B, C, D, E, F, G>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>, g: ColdSignal<G>) -> ColdSignal<(A, B, C, D, E, F, G)> {
1175+
return zip(a, b, c, d, e, f)
1176+
.zipWith(g)
1177+
.map(repack)
1178+
}
1179+
1180+
public func zip<A, B, C, D, E, F, G, H>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>, g: ColdSignal<G>, h: ColdSignal<H>) -> ColdSignal<(A, B, C, D, E, F, G, H)> {
1181+
return zip(a, b, c, d, e, f, g)
1182+
.zipWith(h)
1183+
.map(repack)
1184+
}
1185+
1186+
public func zip<A, B, C, D, E, F, G, H, I>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>, g: ColdSignal<G>, h: ColdSignal<H>, i: ColdSignal<I>) -> ColdSignal<(A, B, C, D, E, F, G, H, I)> {
1187+
return zip(a, b, c, d, e, f, g, h)
1188+
.zipWith(i)
1189+
.map(repack)
1190+
}
1191+
1192+
public func zip<A, B, C, D, E, F, G, H, I, J>(a: ColdSignal<A>, b: ColdSignal<B>, c: ColdSignal<C>, d: ColdSignal<D>, e: ColdSignal<E>, f: ColdSignal<F>, g: ColdSignal<G>, h: ColdSignal<H>, i: ColdSignal<I>, j: ColdSignal<J>) -> ColdSignal<(A, B, C, D, E, F, G, H, I, J)> {
1193+
return zip(a, b, c, d, e, f, g, h, i)
1194+
.zipWith(j)
1195+
.map(repack)
1196+
}
1197+
10901198
/// Blocking methods for receiving values.
10911199
extension ColdSignal {
10921200
/// Starts the receiver, then returns the first value received.

0 commit comments

Comments
 (0)