2015-12-04 10 views
5

gözlenebiliri?RxSwift: Farklı tip kullanın Zip ben şekilde gibi bir zip farklı türde 2 gözlenebilirleri birleştirebilirsiniz nasıl RxSwift 2.0.0-beta</p> <p>kullanıyorum

// This works 
[just(1), just(1)].zip { intElements in 
    return intElements.count 
} 

// This doesn't 
[just(1), just("one")].zip { differentTypeElements in 
    return differentTypeElements.count 
} 

Ben şimdiki geçici çözüm, sonra türlerini birleştiren isteğe bağlı tuplea şeyi eşleştirmek için bir isteğe bağlı olmayan birine isteğe bağlı dizilerini fermuarlar.

let intObs = just(1) 
     .map { int -> (int: Int?, string: String?) in 
      return (int: int, string: nil) 
    } 
    let stringObs = just("string") 
     .map { string -> (int: Int?, string: String?) in 
     return (int: nil, string: string) 
    } 
    [intObs, stringObs].zip { (optionalPairs) -> (int: Int, string: String) in 
     return (int: optionalPairs[0].int!, string: optionalPairs[1].string!) 
    } 

Bu kesinlikle oldukça çirkin. Daha iyi bir yol nedir?

cevap

11

Bu benim için çalışır. Ben RxSwift-2.0.0-beta

zip(just(1), just("!")) { (a, b) in 
    return (a,b) 
} 
+0

Doh için çalışmasını sağlamak için nasıl olduğunu Xcode7 bunu test! Ben sadece düzenli 'zip' yerine koleksiyon türleri uzantısı zip kullanarak sıkışmış. Teşekkürler! – GDanger

+0

Zip'in senkron olduğunu varsaymak güvenli midir? – user805981

4
İşte

o RxSwift 2.3+

Observable.zip(Observable.just(1), Observable.just("!")) { 
    return ($0, $1) 
} 

veya

Observable.zip(Observable.just(1), Observable.just("!")) { 
    return (anyName0: $0, anyName1: $1) 
}